Schneller Wechsel zwischen virtuellen Sitzungen (Bildschirm?)

Schneller Wechsel zwischen virtuellen Sitzungen (Bildschirm?)

Ich möchte mehrere virtuelle Sitzungen in einem Putty-Fenster haben und schnell zwischen ihnen wechseln. Wie geht das am besten? screenIch weiß, dass ich die Sitzung trennen ctrl+adund 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, screendas 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 
  1. 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;
    ...
    
  2. Wenn Sie sich bewerben screen -ls, sollten Ihre Bildschirme wie folgt 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. 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)
  1. 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)
  1. 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+vein einzufügen . Die Ergebnisse sollten wie folgt aussehen.tab-d

81592.data13
81586.data12
81574.data10
81580.data11
  1. 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
    
  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. Voilà. Jeder Bildschirm, den Sie verlassen, bringt Sie zum nächsten.

Viel Spaß bei der Vorführung!!

verwandte Informationen