Antworten:
Nur um zu erweitern, was Ansgar gesagt hat, falls Sie nicht sehr vertraut mit Gnu-Bildschirm sind, werden Sie wahrscheinlich mit mehreren "Fenstern" in einer einzigen Bildschirmsitzung das erreichen, was Sie brauchen.
ctrl+ a, cWird ein neues „Fenster“ in der aktiven Bildschirmsitzung erstellen. 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+ a, "Wird Ihnen eine Liste aller geöffneten Fenster.
Mithilfe dieser 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 ~ / .screenrc die folgende Zeile hinzufügen, werden immer die geöffneten und ausgewählten Fenster angezeigt, sodass Sie nicht mehr nachverfolgen 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 benutze, die aber vollständig anpassbar ist (siehe Manpage oder Google nach "gnu screen hardstatus" suchen).
Es gibt eine Menge anderer Dinge, die Sie damit tun können (zum Beispiel die verschiedenen geöffneten Fenster). Es lohnt sich also, einige Tutorials zu lesen.
Hier sind ein paar, die ich mit 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 allen:
# From your terminal:
$ man screen
Ich hoffe, das hilft.
Matthew
Ja, screen
ist wahrscheinlich der richtige Weg. Ctrl+ a, nWerden Sie zum nächsten Fenster nehmen, Ctrl+ a, pum den vorherigen. CtrlMit + a, 0.. 9können Sie zu einem bestimmten Bildschirm wechseln.
Was die anderen sagen, ist richtig. Ich möchte nur erwähnen, tmux
ist eine Alternative zu screen
. Sie haben sehr ähnliche Befehle.
Beide screen
und 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 Sessions an (jede mit eigenen Fenstern). Das braucht man sehr selten.
Hier sind einige Links zur Dokumentation des Bildschirms und ein Crash-Kurs über tmux .
Nach so viel Zeit habe ich ein Skript erstellt, um dieses völlig fehlende Feature zu umgehen. Zuallererst braucht es ein Fifo:
mkdir ~/.screen
mkfifo ~/.screen/pipe
Diese Named Pipe ist nützlich für die Kommunikation zwischen der getrennten Sitzung und der Sitzung "Main-without-screen".
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 ein "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 gerne erfinden, ich benutze die Session Work für verschiedene Dinge
Bsp .: ~ / .screen / Workrc
layout new Work
screen -t "bash" bash --login
Jetzt befinden wir uns im Sitzungsmonitor, wenn wir Folgendes eingeben:
sc Work
Der Session Monitor trennt sich und schreibt "Work" in die namedpipe. Folglich geht das erste sc-Skript weiter und hängt die Sitzung "Work" an.
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.
Sie können dies mit einem einfachen Shell-Skript wie z
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 screen -ls
Sie sich bewerben , sollten Ihre Bildschirme so aussehen
There 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.
Jetzt können Sie die getrennten Bildschirme mit isolieren grep
.
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)
Nun können Sie die gewünschten Elemente (z. B. Daten) erneut mit auswählen 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 für die Suche ä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 Sie nun die Spalten in Felder auf und wählen Sie mit das 2. Feld aus cut
.
screen -ls | grep Detached | grep data | cut -d' ' -f2
Sie müssen ctrl+v
dann die Tabulatortaste drücken , um ein tab
nach dem Begrenzer-Parameter 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 die formulierten Befehle immer zuerst, bevor Sie sie ausführen. ich benutzteecho 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
Voila. Jeder Bildschirm, von dem Sie sich lösen, führt Sie zum nächsten.
Fröhliches Screening !!
Ich habe ein Knotenskript geschrieben, mit dem der Benutzer mithilfe der Pfeiltasten eine Bildschirmsitzung aus einer Liste auswählen kann, an die eine Verbindung hergestellt werden soll. Ich habe es zu einem npm-Paket gemacht. Du kannst es dir hier ansehen : screen-command . Oder nur npm i -g screen-command
zum Ausprobieren, vorausgesetzt, Sie haben node.js bereits installiert. Verwenden Sie sc
nach der Installation des Pakets den Befehl , um die Liste der Bildschirme aufzurufen.
Ich hoffe, dies erleichtert das Umschalten auf den gewünschten Bildschirm.
^a
zu etwas anderem, damit es nicht lächerlich nervt, in bash die Zeilenbearbeitung im Emacs-Stil zu verwenden, und so weiter. Ich benutze^t
.