Schnelles Umschalten zwischen virtuellen Sitzungen (Bildschirm?)
Ich möchte einige virtuelle Sitzungen in einem Putty-Fenster haben und schnell zwischen ihnen wechseln. Was ist der beste Weg, das zu tun? screen
? Ich weiß, dass ich mit ctrl+ad
trennen und dann wieder an eine andere Sitzung anhängen kann, aber es scheint viel zu tippen.
6 answers
Nur um zu erweitern, was Ansgar gesagt hat, falls Sie mit gnu Screen nicht sehr vertraut sind, werden mehrere "Fenster" in einer einzigen Bildschirmsitzung wahrscheinlich das erreichen, was Sie brauchen.
strg+a, c erstellt ein neues "Fenster" in Ihrer aktiven Bildschirmsitzung. Sie können mit zwischen mehreren Fenstern (wie von Ansgar angegeben) wechseln.+ a, n für das nächste Fenster und Strg+a,p für die vorherige Fenster.
strg+a," gibt Ihnen eine Liste aller geöffneten Fenster.
Mit diesen einfachen Verknüpfungen können Sie sehr schnell und einfach zwischen verschiedenen Terminals wechseln und Ihr Ziel erreichen, ohne mehrere Bildschirmsitzungen zu verwenden.Wenn Sie die folgende Zeile zu ~/hinzufügen.screenrc Es zeigt immer Ihre geöffneten Fenster an und welches ausgewählt ist, sodass Sie nicht verfolgen müssen, in welchem Fenster Sie sich befinden erinnern.
hardstatus alwayslastline '%{= kg}[ %{G}%H %{g}][%= %{= kB}%?%-Lw%?%{+b r}(%{G}%n*%f %t%?(%u)%?%{r})%{-b B}%?%+Lw%?%?%= %{g}%]'
Dies ist die Hardstatus-Zeile, die ich gerne verwende, aber sie ist vollständig anpassbar (siehe Manpage oder suche Google nach "gnu screen hardstatus").
Es gibt eine Menge anderer Dinge, die Sie damit tun können (z. B. Benennen der verschiedenen geöffneten Fenster), daher lohnt es sich, einige Tutorials zu lesen.
Hier sind ein paar, die ich gefunden mit einer schnellen suchen:
Http://news.softpedia.com/news/GNU-Screen-Tutorial-44274.shtml
Http://www.ibm.com/developerworks/aix/library/au-gnu_screen/
Und natürlich das nützlichste von allen:
# From your terminal:
$ man screen
Hoffe, das hilft.
Matthäus
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-10-02 23:03:22
Ja, screen
ist höchstwahrscheinlich der richtige Weg. Strg+a,n bringt Sie zum nächsten Fenster, Strg+a,p zum vorherigen. Strg+ein,0..9 ermöglicht es Ihnen, zu einem bestimmten Bildschirm zu wechseln.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-09-18 19:18:34
Was die anderen sagen ist richtig. Ich möchte nur erwähnen, dass tmux
eine Alternative zu screen
ist. Sie haben sehr ähnliche Befehle.
Sowohl screen
als auch tmux
bieten mehrere Fenster für eine laufende Sitzung, und dies ist wahrscheinlich das, was Sie wollen.
tmux
bietet zusätzlich das Springen zwischen mehreren Sitzungen (jede mit eigenen Fenstern). Das würden Sie sehr selten brauchen.
Hier sind einige Links zur Dokumentation von screen und ein Crashkurs über tmux.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-10-10 09:05:00
Nach so viel Zeit habe ich ein Skript erstellt, um diese völlig fehlende Funktion zu umgehen. Zuerst braucht es ein Fifo:
mkdir ~/.screen
mkfifo ~/.screen/pipe
Diese benannte Pipe ist nützlich für die Kommunikation zwischen der Detatched-Sitzung und der "Main-without-Screen" - Sitzung.
Datei sc (in $PATH):
#!/bin/bash
CONFIGFILE=~/.screen/"$1""rc"
if [ ! -r $CONFIGFILE ] ; then
echo "Configurazione per $1 Assente" >&2
exit 1
fi
exec 3<> ~/.screen/pipe
if [ "$STY" != "" ] ; then
screen -d "$STY"
echo "$1" >&3
else
screen -r "$1" 2>/dev/null || screen -S "$1" -c $CONFIGFILE
while true ; do
read line <&3
screen -r "$line" 2>/dev/null || screen -S "$line" -c ~/.screen/"$line""rc"
done
fi
Ein Beispiel für eine "CONFIGFILE" ist: ~/.bildschirm / Monitorrc
layout new Monitor
screen -t "bash" bash --login
split -v
focus next
split
focus bottom
screen -t "cv" sh -c "watch /usr/bin/cv -w"
split
focus bottom
screen -t "sys.log" sh -c "tail -F /var/log/sys.log"
focus up
focus up
resize 25
screen -t "top" sh -c "top"
focus left
Das Ergebnis ist: wenn Sie Bildschirmtyp starten möchten:
sc Monitor
oder eine andere sessionrc, die Sie mögen erfinden, verwende ich die Session-Arbeit für verschiedene Sachen
Ex: ~/.bildschirm / Workrc
layout new Work
screen -t "bash" bash --login
Jetzt sind wir im Sitzungsmonitor, wenn wir eingeben:
sc Work
Der Sitzungsmonitor löst sich und schreibt "Arbeit" in die Namedpipe. Folglich geht das erste sc-Skript vorwärts und fügt die Sitzung "Arbeit"hinzu.
Der vom Sitzungsmonitor aufgerufene sc wird geschlossen.
Wenn wir alle Sitzungen trennen, befinden wir uns in einer Endlosschleife, sodass wir Strg-c ausführen müssen, um zu beenden.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-01-22 08:39:47
Sie können dies mit einem einfachen Shell-Skript wie
for s in `screen -ls | grep Detached | grep <regex to your screen names>`; do screen -r $s; done
-
Nehmen wir an, Sie haben nur wenige Bildschirme geöffnet. Nehmen wir auch an, Sie haben sie als Arbeit und Daten kategorisiert.
for i in {10..13}; do screen -S `printf data%02d $i`; done; for i in {0..5}; do screen -S `printf work%02d $i`; done; ...
-
Wenn Sie
screen -ls
anwenden, sollten Sie Ihre Bildschirme wie folgt habenThere are screens on: 81592.data13 (Detached) 81539.work04 (Detached) 81527.work02 (Detached) 81586.data12 (Detached) 81574.data10 (Detached) 81533.work03 (Detached) 81488.work00 (Detached) 81607.ttys014.Mo (Attached) 81545.work05 (Detached) 81580.data11 (Detached) 81521.work01 (Detached) 81515.work00 (Detached) 12 Sockets in /var/folders/qs/cvlbhpr54fnb96vtx01bs9k00000gn/T/.screen.
-
Nun können Sie die abgetrennten Bildschirme mit
grep
isolieren.screen -ls | grep Detached
Sie sollten so etwas bekommen
81592.data13 (Detached)
81539.work04 (Detached)
81527.work02 (Detached)
81586.data12 (Detached)
81574.data10 (Detached)
81533.work03 (Detached)
81488.work00 (Detached)
81545.work05 (Detached)
81580.data11 (Detached)
81521.work01 (Detached)
81515.work00 (Detached)
-
Jetzt können Sie diejenigen auswählen, die Sie möchten (z.B. Daten), wieder mit
grep
.screen -ls | grep Detached | grep data
Dadurch werden nur die Datenbildschirme isoliert. Sie können das Schlüsselwort grep mit regulären Ausdrücken ändern, um Ihre Suche anzupassen.
81592.data13 (Detached)
81586.data12 (Detached)
81574.data10 (Detached)
81580.data11 (Detached)
-
Zum Glück ist das Ergebnis gut strukturiert und tabulatorgetrennt. Teilen wir nun die Spalten in Felder auf und wählen das zweite Feld mit
cut
.screen -ls | grep Detached | grep data | cut -d' ' -f2
Sie müssen ctrl+v
und dann Tab drücken, um nach dem Trennzeichen einen tab
einzufügen -d
. Die Ergebnisse sollten so sein.
81592.data13
81586.data12
81574.data10
81580.data11
-
Packen Sie dies nun mit den Anführungszeichen
...
in einen Befehl und durchlaufen Sie die Ergebnisse wie folgt. Überprüfen Sie immer zuerst die formulierten Befehle, bevor Sie sie tatsächlich ausführen. Ich habeecho screen -r
for s in `screen -ls | \ grep Detached | grep data | \ cut -d' ' -f2`; do \ echo screen -r $s; \ done
-
Wenn alles gut geht, dann versuche es ohne
echo
.for s in `screen -ls | \ grep Detached | grep data | \ cut -d' ' -f2`; do \ screen -r $s; \ done
Voila. Jeder Bildschirm, von dem Sie sich trennen, bringt Sie zum nächsten.
Happy-screening!!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-11-29 22:34:11
Ich habe ein Knotenskript geschrieben, mit dem der Benutzer mithilfe der Pfeiltasten eine Sitzung auswählen kann, an die er angehängt werden soll. Ich habe es zu einem NPM-Paket gemacht. Sie können es hier überprüfen: screen-command. Oder einfach npm i -g screen-command
, um es auszuprobieren, vorausgesetzt, Sie haben node.js installiert bereits. Verwenden Sie nach der Installation des Pakets den Befehl sc
, um die Liste der Bildschirme aufzurufen.
Ich hoffe, dies erleichtert das Umschalten auf den gewünschten Bildschirm.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-11-22 04:54:01