
Dies ist eine ausführlichere Erklärung der Frage.
Mein Ziel ist:
Starten Sie eine Bash-Shell, die mit einer Reihe von Umgebungsvariablen konfiguriert ist, aber im Hintergrund ausgeführt wird.
Starten Sie etwa fünfBildschirmBefehle in der Bash-Shell, die jeweils ihre eigenen Befehle ausführen, aber die in der Bash-Shell festgelegten Umgebungsvariablen verwenden. Die
screen
Befehle sollten alle im Bash-Fenster angeordnet sein, vorzugsweise nebeneinander.Rufen Sie später die Bash-Shell auf, in der alle
screen
Befehle angezeigt werden.Schließen Sie die Bash-Shell und die zugehörige Datei,
screen
wenn Sie fertig sind.
Antwort1
Nun, nach einiger Zeit zu Ihrer Frage gibt es einige Beobachtungen:
Zeile 2:Befehle sollten alle im Bash-Fenster angeordnet sein, vorzugsweise gekacheltist nicht möglich, da im abgetrennten ZustandEs gibt keine Fenster.
Wenn Sie also erneut anhängen, sehen Sie immer nur einenPseudo-Tty.
Um jedoch annähernd das Gewünschte zu erreichen, versuchen Sie Folgendes:
Erstellen Sie zunächst eine RC-Datei cat >screenRcTest
wie folgt:
setenv MyVariable Test
screen -t Top top
screen -t VMStat vmstat -n 1
screen -t OpenPorts watch -n 2 'netstat -tan | grep LISTEN'
screen -t IF-Configs watch -n2 'ip -s link show | grep -v "^ *[RT]X: bytes"'
screen -t "Bourne Again Shell" /bin/bash -i
Bereiten Sie dann einen run
Wrapper wie folgt vor:
screen -ls | grep -q screenTest || screen -dmS screenTest -c ./screenRcTest
Dadurch wird eine neue Bildschirmsitzung im Hintergrund ausgeführt, sofern diese noch nicht vorhanden ist.
Zum BauengefliestPräsentation, bereiten Sie ein weiteres Shell-Skript alscat >screenSplitTest
#!/bin/bash
while read line ;do
screen -X $line
done <<eof
split
split
resize 20
split -v
resize 82
select 0
focus
select 1
focus
split -v
select 2
focus
select 3
focus
select 4
eof
und nicht vergessen chmod +x screenSplitTest
.
Führen Sie abschließend denAnzeigebefehlals:
xterm -fn 9x15 -geom 160x60 -exec screen -DrS screenTest
Dadurch wird ein neues Fenster mit nur einem „Ready“ geöffnet bash
.
In dieseminnerebash, drücke einfach:
./screenSplitTest
Dadurch wird Ihr Fenster geteilt und Sie sind wieder bereit für Ihre Bash-Sitzung.
Jetzt eingeben:
echo $MyVariable
Test
Sie sehen also, wie die Umgebungsvariable an das untergeordnete Bash-Element übergeben wird.
Ergänzung bearbeiten:
Nachdem Sie alles getan haben, könnten Sie Folgendes in Ihreminnerebash:
trap '[ $(tput lines) == 60 ] && [ $(tput cols) == 160 ] && ./screenSplitTest' WINCH
Sie können die Verbindung also trennen, indem Sie Folgendes eingeben: Ctrl-A d
Beim nächsten Ausführen xterm
mit denselben Argumenten und derselben Geometrie wird das Skript screenSplitTest automatisch gestartet.
Bearbeiten 2
Und jetzt können Sie dies sogar trap
in Ihrem installieren .bashrc
, indem Sie MyVariable
sicherstellen, dass Bash ein Kind von istBildschirmRcTestBildschirm (nach dem Wechseln screenSplitTest
zu einer versteckten Datei in $HOME/.screenSplitTest
For Constance):
[ "$TERM.$MyVariable" == "screen.Test" ] && \
trap '[ $(tput lines) == 60 ] && [ $(tput cols) == 160 ] && $HOME/.screenSplitTest' WINCH
Antwort2
Meines Wissens nach können Sie Bildschirminstanzen nicht kacheln, aber Sie können Tmux-Instanzen kacheln. Sie könnten eine RC-Datei für die gemeinsamen Umgebungseinstellungen erstellen und diese dann mit in jede Ihrer 5 Bash-Shells laden bash --rcfile <your file here>
.
Die Bash-Shells werden durch Starten von tmux gestartet. Wenn Sie sich darin befinden, führen Sie einen Befehl aus, um für jede Bash-Instanz eine neue Aufteilung zu erstellen (beispielsweise Strg+B % für eine vertikale Aufteilung unter Verwendung der Standardeinstellungen).