Wie kann verhindert werden, dass das Terminal geschlossen wird, wenn das Programm, mit dem es gestartet wurde, beendet wird?

Wie kann verhindert werden, dass das Terminal geschlossen wird, wenn das Programm, mit dem es gestartet wurde, beendet wird?

Wenn ich ein Terminal (irgendein Terminal, zum Beispiel urxvt) wie starte urxvt -e sleep 5, wird ein neues Terminal gestartet, aber nach 5 Sekunden wird das Terminal geschlossen, weil das sleepProgramm beendet wurde. Wie kann ich ein Terminal mit einem Programm auf der Befehlszeile starten, aber dafür sorgen, dass das Terminal aktiv bleibt, nachdem dieser Prozess beendet wurde?

In der Praxis würde ich eigentlich gerne Folgendes tun urxvt -e tmux new-session top: , wodurch urxvt mit einer laufenden tmux-Sitzung geöffnet wird top. Wenn ich jedoch drücke q, topwird beendet, was auch dazu führt, dass tmux und urxvt ebenfalls beendet werden. Ich möchte, dass topich beim Beenden zu einer Shell innerhalb von tmux weitergeleitet werde.

Antwort1

Das Terminal (tmux) schließt sich, wenn es den Befehl ausgeführt hat, den Sie ihm zur Ausführung gegeben haben. Wenn Sie ausführen topund dann eine interaktive Shell verwenden möchten, müssen Sie ihm dies mitteilen. Das Kombinieren von Befehlen ist die Aufgabe der Shell. Führen Sie daher eine Zwischenshell aus (die nicht interaktiv ist) und teilen Sie ihr mit,Esum die beiden Befehle nacheinander auszuführen.

urxvt -e tmux new-session sh -c 'top; "$SHELL"'

Antwort2

Eine Möglichkeit:

gnome-terminal -e sh -c "sleep 5; bash"

Der Sinn besteht darin, die Shell (in diesem Fall) auszuführen, bashnachdem Ihr anfänglicher Befehl beendet ist. Einfach gnome-terminal -e 'sleep 5; bash'ist das leider nicht möglich, da der gesamte Satz sleep 5; bashals ein Befehl interpretiert wird.

verwandte Informationen