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.

Author: zzz, 2012-09-18

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

 27
Author: Matthew,
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.

 2
Author: Ansgar Wiechers,
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.

 1
Author: tkruse,
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.

 1
Author: Thomas8,
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 
  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 Sie screen -ls anwenden, sollten Sie Ihre Bildschirme wie folgt haben

    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. 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)
  1. 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)
  1. 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
  1. 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 habe echo 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, dann versuche 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 trennen, bringt Sie zum nächsten.

Happy-screening!!

 1
Author: Mo Hossny,
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.

 1
Author: hi94740,
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