So öffnen Sie Tabs-Fenster in Gnu-Screen und führen in jedem davon Befehle aus

So öffnen Sie Tabs-Fenster in Gnu-Screen und führen in jedem davon Befehle aus

wenn eine Sitzung mit einem beliebigen Namen wie diesem gestartet wirdscreen -S name1

ich möchte Tabs-Fenster in dieser Bildschirmsitzung öffnen, wie wenn ich Tabs im Gnome-Terminal öffne, so

gnome-terminal --tab -e "some commands"

also, wie geht das?

Antwort1

1. Registerkarten auf dem Bildschirm

Sie suchen Folgendes, um es zu Ihrer .screenrc-Datei hinzuzufügen:

screen -t tab1
screen -t tab2

Hier ist eine schöne, einfache .screenrc-Datei, die Ihnen den Einstieg in eine Statusleiste usw. erleichtert.NOTIZ:Dieser befindet sich normalerweise in Ihrem Home-Verzeichnis /home/<username>/.screenrc.

screen -t validate #rtorrent
screen -t compile #irssi
screen -t bash3
screen -t bash4
screen -t bash5
altscreen on
term screen-256color
bind ',' prev
bind '.' next
#
#change the hardstatus settings to give an window list at the bottom of the
#screen, with the time and date and with the current window highlighted
hardstatus alwayslastline
#hardstatus string '%{= kG}%-Lw%{= kW}%50> %n%f* %t%{= kG}%+Lw%< %{= kG}%-=%c:%s%{-}'
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]'

Bildschirmfoto

ss der Bildschirmsitzung

2. Registerkarten auf dem Bildschirm (mit darin ausgeführten Befehlen)

Das folgende Beispiel .screenrcerstellt zwei Registerkarten und führt in jeder drei Echo-Befehle aus.

screen -t tab1                                                                                     
select 0                                                                                           
stuff "echo 'tab1 cmd1'; echo 'tab1 cmd2'; echo 'tab1 cmd3'^M"                                     
screen -t tab2                                                                                     
select 1                                                                                           
stuff "echo 'tab2 cmd1'; echo 'tab2 cmd2'; echo 'tab2 cmd3'^M"                                     

altscreen on                                                                                       
term screen-256color                                                                               
bind ',' prev                                                                                      
bind '.' next                                                                                      
#                                                                                                  
#change the hardstatus settings to give an window list at the bottom of the                        
#screen, with the time and date and with the current window highlighted                            
hardstatus alwayslastline                                                                          
#hardstatus string '%{= kG}%-Lw%{= kW}%50> %n%f* %t%{= kG}%+Lw%< %{= kG}%-=%c:%s%{-}'              
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]'

Bei dieser Technik werden Bildschirme selectund stuffBefehle verwendet, um zunächst eine der Registerkarten auszuwählen und dann eine Zeichenfolge hineinzustopfen.

Bildschirmfoto

Bildschirmausschnitt mit Tabs und Befehlen

3. Erstellen von #2 ohne Verwendung einer .screenrcDatei

Wenn Sie nach einem Szenario suchen, in dem Sie:

  1. Erstellen einer Bildschirmsitzung
  2. Laden Sie es mit Tabs
  3. Lassen Sie jede Registerkarte ihre eigenen Befehle ausführen
  4. erfordert keine .screenrcDatei

Dann ist dies das Richtige für Sie! Aber seien Sie vorbereitet. Die Befehlszeilen können etwas knifflig werden.

Lassen Sie uns zunächst eine Bildschirmsitzung erstellen:

$ screen -AdmS myshell -t tab0 bash

Die Schalter -AdmShaben folgende Funktionen:

(Siehe dieBildschirm-Manpagefür mehr Details)

-A

    Adapt the sizes of all windows to the size of the  current terminal. 
    By default, screen tries to restore its old window sizes when
    attaching to resizable terminals

-d -m

    Start screen in "detached" mode. This creates a new session but
    doesn't attach to it. This is useful for system startup scripts.

-S Sitzungsname

    When creating a new session, this option can be used to specify a
    meaningful name for the session. This name identifies the session for
    "screen -list" and "screen -r" actions. It substitutes the default
    [tty.host] suffix.

Beginnen wir nun mit dem Laden der Tabs und ihrer Befehle:

$ screen -S myshell -X screen -t tab1 vim
$ screen -S myshell -X screen -t tab2 ping www.google.com
$ screen -S myshell -X screen -t tab3 bash

Diese 3 Befehle erstellen 3 zusätzliche Tabs, führen Vim aus, pingen Google an und starten eine Bash-Shell. Wenn wir die Bildschirmsitzungen auflisten, sehen wir Folgendes:

$ screen -ls
There is a screen on:
        26642.myshell   (Detached)
1 Socket in /var/run/screen/S-root.

Wenn wir uns mit der Bildschirmsitzung verbinden,meine Schale, und die darin enthaltenen Registerkarten auflisten, sehen wir Folgendes:

$ screen -r myshell

Drücken Sie diese Tastenkombination: Ctrl+ Agefolgt von Shift+"

Num Name                                                                   Flags

  0 tab0                                                                       $
  1 tab1                                                                       $
  2 tab2                                                                       $
  3 tab3                                                                       $

Wechseln zuTab2:

64 bytes from ord08s08-in-f20.1e100.net (74.125.225.116): icmp_seq=443 ttl=55 time=41.4 ms
64 bytes from ord08s08-in-f20.1e100.net (74.125.225.116): icmp_seq=444 ttl=55 time=33.0 ms
64 bytes from ord08s08-in-f20.1e100.net (74.125.225.116): icmp_seq=445 ttl=55 time=30.1 ms

Bildschirmfoto

ss des Bildschirms, initiiert von CLI

Die obigen Befehle sind die grundlegende Methode, um das zu erreichen, wonach der OP gesucht hat. Dies kann natürlich mithilfe von Bash-Aliasen oder sogar Shell-Skripten verdichtet und verfeinert werden. Dies dient lediglich dazu, die Möglichkeiten zu demonstrieren und den Weg aufzuzeigen!

Verweise

Antwort2

eine kleine Ergänzung zur Antwort. Zuerst wird der Befehl wiederholt, dann wird er in die Befehlszeile eingefügt und anschließend ausgeführt, wenn die Zeile mit \n oder ^M beendet wird.

da mich das Echo gestört hat, habe ich als letzten Befehl noch \nclear\n angehängt, damit das Bildschirmfenster sauber startet.

verwandte Informationen