
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
2. Registerkarten auf dem Bildschirm (mit darin ausgeführten Befehlen)
Das folgende Beispiel .screenrc
erstellt 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 select
und stuff
Befehle verwendet, um zunächst eine der Registerkarten auszuwählen und dann eine Zeichenfolge hineinzustopfen.
Bildschirmfoto
3. Erstellen von #2 ohne Verwendung einer .screenrc
Datei
Wenn Sie nach einem Szenario suchen, in dem Sie:
- Erstellen einer Bildschirmsitzung
- Laden Sie es mit Tabs
- Lassen Sie jede Registerkarte ihre eigenen Befehle ausführen
- erfordert keine
.screenrc
Datei
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 -AdmS
haben 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
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.