GNU-Bildschirmfenster nach Programmende geöffnet lassen?

8

Das Handbuch zum GNU-Bildschirm lautet:

Wenn ein Programm beendet wird, wird screen(standardmäßig) das Fenster geschlossen, in dem es enthalten ist.

Das (per default)schlägt vor, dass Sie diese Option ändern können, damit ein Programm, das beendet wird, das Fenster, in dem es sich befindet, nicht beendet. Wie ändere ich dieses Verhalten?

Dan
quelle
Da Sie getaggt haben bash, müssen Sie sich bewusst sein, dass Ihre Shell auch ein Programm ist, das Sie separat benötigen exit. Dies ist vor allem dann relevant, wenn Sie ein Programm direkt auf einem Bildschirm ohne Shell ausführen.
Daniel Beck
1
Wollen Sie damit sagen, dass Sie den Inhalt des Bildschirms nach dem Beenden des Programms anzeigen oder andere Dinge mit dem Fenster tun möchten?
Paul
@ Paul Letzteres. Momentan starte ich eine Reihe lokaler Entwicklungsserver über meine .screenrc, aber das bedeutet, wenn ich einen töte, wird das Fenster geschlossen. Wäre schön, wenn ich es dann im selben Fenster neu starten könnte, in dem es war.
Dan
Ok, verstanden - antworte unten.
Paul

Antworten:

10

versuchen Sie es mit zombieoder defzombie. Ich verwende die folgenden Einstellungen.

# don't remove windows from the window list as soon as window process exits.
zombie kr #  k: destory window, r: resurrect window
Yoshikaw
quelle
Toller Fund! Das ist ein dummer Befehlsname. Ich durchsuchte die Manpage mit jedem Begriff, den ich mir vorstellen konnte, und fand ihn nicht.
Daniel Beck
2
Dies ist fast genau das, wonach ich suche (und sicherlich nah genug) - wenn es nur rautomatisch wäre ...
Dan
0

Ich würde vorschlagen, den Bildschirm zuerst mit einer "Shell" zu starten und Ihren Befehl auszuführen, damit Sie nach Abschluss des Vorgangs zu Ihrer Shell im Bildschirm zurückkehren und die Ausgabe Ihres Befehls sehen können. (Möglicherweise möchten Sie die Autologout-Funktion der Shell deaktivieren, um zu vermeiden, dass sie nach einiger Zeit geschlossen wird.)

Andernfalls habe ich die Manpage des Bildschirms erneut gelesen und kann keine andere Option finden, um ein Fenster offen zu halten, nachdem sein Hauptbefehl beendet wurde.

jhcaiced
quelle
0

Ein screenFenster wird beendet, wenn das von ihm ausgeführte Programm beendet wird. Dies liegt daran, dass der Bildschirm selbst keine Shell ist. Sobald das Programm beendet ist, kann mit dem Fenster nichts mehr getan werden. Sie können kein neues Programm starten, da unter dieser Terminalsitzung nichts mehr übrig ist, was ein Programm starten könnte.

Ein neu erstelltes Bildschirmfenster führt standardmäßig bash aus (oder was auch immer Ihre nominierte Shell ist). Da bash eine Shell ist, können Sie eine beliebige Anzahl von Programmen starten, und wenn sie beendet werden, kehren sie zu bash zurück. Dann kann ein anderes Programm gestartet werden. Ein Fenster, in dem bash ausgeführt wird, verhält sich also so, wie Sie es beschreiben. Erst wenn bash selbst beendet wird, wird das Fenster geschlossen.

Beachten Sie, dass dies dasselbe Verhalten wie bei jeder Terminalsitzung ist. Nach dem Beenden des letzten Programms endet die Terminalsitzung (bei einem normalen Terminal wird diese Sitzung erneut gestartet, wenn sie von init festgelegt wurde, und es wird ein Anmeldebildschirm angezeigt).

Dies ist ein bisschen hackig, aber normalerweise, wenn Sie den Bildschirm mit einem Befehl starten, beendet der Befehl, der ausgeführt wird, das Fenster. Wenn Sie bash jedoch auch mit dem Befehl mit der -cOption starten , wird bash auch beendet, sobald der Befehl beendet wird.

Wenn wir also möchten, dass bash einen Befehl ausführt, aber am Ende des Befehls bleibt, müssen wir den Befehl als Teil des bash-Initilisierungsprozesses ausführen.

Wenn Sie beispielsweise eine neue Datei "startserver1" erstellen, die die zum Starten des Servers erforderlichen Befehle enthält:

#start the server
ls -la

Führen Sie dann den Bildschirm mit bash aus und initialisieren Sie ihn mit der Datei startserver1:

screen bash --init-file startserver1

Dies ruft den Bildschirm auf, startet Bash und initialisiert Bash mit Ihrem Server-Startskript. Sobald der Server beendet ist, befinden Sie sich in der Bash-Sitzung im Bildschirmfenster.

Paul
quelle
Es würde jedoch die Ausgabe zugänglich halten.
Daniel Beck