Schnelles Umschalten zwischen virtuellen Sitzungen (Bildschirm?)

19

Ich möchte einige virtuelle Sitzungen in einem Kittfenster haben und schnell zwischen ihnen wechseln. Wie geht das am besten? screen? Ich weiß, dass ich mich ctrl+advon einer anderen Sitzung abkoppeln und sie dann erneut zuordnen kann , aber es scheint , als würde ich viel tippen.

zzz
quelle

Antworten:

22

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

Matthew
quelle
2

Ja, screenist 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.

Ansgar Wiechers
quelle
Sie können viel schnellere Tastenkombinationen einrichten, z. B. F11 für das vorherige und F12 für das nächste Fenster. Und ändern Sie das Bildschirm-Escape-Zeichen von ^azu etwas anderem, damit es nicht lächerlich nervt, in bash die Zeilenbearbeitung im Emacs-Stil zu verwenden, und so weiter. Ich benutze ^t.
Peter Cordes
1

Was die anderen sagen, ist richtig. Ich möchte nur erwähnen, tmuxist eine Alternative zu screen. Sie haben sehr ähnliche Befehle.

Beide screenund tmuxbieten mehrere Fenster für eine laufende Sitzung, und dies ist wahrscheinlich das, was Sie wollen. tmuxbietet 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 .

tkruse
quelle
1

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.

Thomas8
quelle
1

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 
  1. 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;
    ...
    
  2. Wenn screen -lsSie 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.
    
  3. 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)
  1. 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)
  1. 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+vdann die Tabulatortaste drücken , um ein tabnach dem Begrenzer-Parameter einzufügen -d. Die Ergebnisse sollten so sein.

81592.data13
81586.data12
81574.data10
81580.data11
  1. 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
    
  2. 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
    
  3. Voila. Jeder Bildschirm, von dem Sie sich lösen, führt Sie zum nächsten.

Fröhliches Screening !!

Mo Hossny
quelle
Dies ist eine wirklich schöne Antwort und erhöht die Gesamtqualität dieser Website.
123456789123456789123456789
1

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-commandzum Ausprobieren, vorausgesetzt, Sie haben node.js bereits installiert. Verwenden Sie scnach der Installation des Pakets den Befehl , um die Liste der Bildschirme aufzurufen.

Ich hoffe, dies erleichtert das Umschalten auf den gewünschten Bildschirm.

hi94740
quelle