Wie kann Bash Screen im Hintergrund eingerichtet und später in den Vordergrund gebracht werden?

Wie kann Bash Screen im Hintergrund eingerichtet und später in den Vordergrund gebracht werden?

Dies ist eine ausführlichere Erklärung der Frage.

Mein Ziel ist:

  1. Starten Sie eine Bash-Shell, die mit einer Reihe von Umgebungsvariablen konfiguriert ist, aber im Hintergrund ausgeführt wird.

  2. 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 screenBefehle sollten alle im Bash-Fenster angeordnet sein, vorzugsweise nebeneinander.

  3. Rufen Sie später die Bash-Shell auf, in der alle screenBefehle angezeigt werden.

  4. Schließen Sie die Bash-Shell und die zugehörige Datei, screenwenn 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 >screenRcTestwie 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 runWrapper 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.

Ergebnis-Screenshot

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 dBeim nächsten Ausführen xtermmit denselben Argumenten und derselben Geometrie wird das Skript screenSplitTest automatisch gestartet.

Bearbeiten 2

Und jetzt können Sie dies sogar trapin Ihrem installieren .bashrc, indem Sie MyVariablesicherstellen, dass Bash ein Kind von istBildschirmRcTestBildschirm (nach dem Wechseln screenSplitTestzu einer versteckten Datei in $HOME/.screenSplitTestFor 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).

verwandte Informationen