.png)
Ich möchte mehrere virtuelle Sitzungen in einem Putty-Fenster haben und schnell zwischen ihnen wechseln. Wie geht das am besten? screen
Ich weiß, dass ich die Sitzung trennen ctrl+ad
und dann wieder mit einer anderen Sitzung verbinden kann, aber das scheint viel Tipparbeit zu sein.
Antwort1
Um noch etwas auf Ansgars Aussage einzugehen, für den Fall, dass Sie mit GNU Screen nicht so vertraut sind: Mehrere „Fenster“ in einer einzigen Bildschirmsitzung werden wahrscheinlich das erreichen, was Sie brauchen.
ctrl+ a, cerstellt ein neues „Fenster“ in Ihrer aktiven Bildschirmsitzung. Sie können zwischen mehreren Fenstern wechseln (wie Ansgar angegeben) mit ctrl+ a, nfür das nächste Fenster und ctrl+ a, pfür das vorherige Fenster.
ctrl+ agibt "Ihnen eine Liste aller Ihrer geöffneten Fenster.
Mit diesen einfachen Tastenkombinationen 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 ~/.screenrc hinzufügen, werden immer Ihre geöffneten Fenster und das ausgewählte Fenster angezeigt, sodass Sie sich nicht merken müssen, in welchem Fenster Sie sich befinden.
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 suchen Sie bei Google nach „gnu screen hardstatus“).
Sie können damit noch eine Menge anderer Dinge tun (z. B. die verschiedenen geöffneten Fenster benennen), es lohnt sich also, einige Tutorials zu lesen.
Hier sind einige, die ich bei einer schnellen Suche gefunden habe:
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 allem:
# From your terminal:
$ man screen
Hoffentlich hilft das.
Matthew
Antwort2
Ja, screen
das ist höchstwahrscheinlich der richtige Weg. Ctrl+ a, nbringt Sie zum nächsten Fenster, Ctrl+ a, pzum vorherigen. Ctrl+ a, 0.. 9ermöglicht Ihnen, zu einem bestimmten Bildschirm zu wechseln.
Antwort3
Nach so langer Zeit habe ich ein Skript geschrieben, um dieses völlig fehlende Feature zu umgehen. Zunächst einmal braucht es ein FIFO:
mkdir ~/.screen
mkfifo ~/.screen/pipe
Diese benannte Pipe ist für die Kommunikation zwischen der getrennten Sitzung und der „Hauptsitzung ohne Bildschirm“ nützlich.
Dateisc( 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: ~/.screen/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 den Bildschirmtyp starten möchten:
sc Monitor
oder eine andere SessionRC, die Sie erfinden möchten. Ich verwende die Session Work für verschiedene Dinge
Beispiel: ~/.screen/Workrc
layout new Work
screen -t "bash" bash --login
Jetzt sind wir im Sitzungsmonitor und geben ein:
sc Work
Der Sitzungsmonitor löst sich und schreibt „Work“ in die Namedpipe. Anschließend fährt das erste SC-Skript fort und fügt die Sitzung „Work“ hinzu.
Das vom Sitzungsmonitor aufgerufene SC wird geschlossen.
Wenn wir alle Sitzungen trennen, befinden wir uns in einer Endlosschleife und müssen zum Beenden Strg+C drücken.
Antwort4
Sie können dies mit einem einfachen Shell-Skript tun, wie
for s in `screen -ls | grep Detached | grep <regex to your screen names>`; do screen -r $s; done
Nehmen wir an, Sie haben einige Bildschirme geöffnet. Nehmen wir außerdem an, Sie haben sie in die Kategorien „Arbeit“ und „Daten“ eingeteilt.
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 sich bewerben
screen -ls
, sollten Ihre Bildschirme wie folgt aussehenThere 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.
Isolieren wir nun die getrennten Bildschirme mithilfe von
grep
.screen -ls | grep Detached
Du solltest 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)
Wählen wir nun die gewünschten Elemente (z. B. Daten) aus, wiederum mit
grep
.screen -ls | grep Detached | grep data
Dadurch werden nur die Datenbildschirme isoliert. Sie können das Schlüsselwort „grep“ durch reguläre Ausdrücke ersetzen, 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 durch Tabulatoren getrennt. Teilen wir nun die Spalten in Felder auf und wählen das zweite Feld mit aus
cut
.screen -ls | grep Detached | grep data | cut -d' ' -f2
Sie müssen dann die Tabulatortaste drücken, um nach dem Trennzeichenparameter ctrl+v
ein einzufügen . Die Ergebnisse sollten wie folgt aussehen.tab
-d
81592.data13
81586.data12
81574.data10
81580.data11
Packen Sie dies nun in einen Befehl unter Verwendung der
...
Anführungszeichen 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, versuchen Sie es ohne
echo
.for s in `screen -ls | \ grep Detached | grep data | \ cut -d' ' -f2`; do \ screen -r $s; \ done
Voilà. Jeder Bildschirm, den Sie verlassen, bringt Sie zum nächsten.
Viel Spaß bei der Vorführung!!