
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 sleep
Programm 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
, top
wird beendet, was auch dazu führt, dass tmux und urxvt ebenfalls beendet werden. Ich möchte, dass top
ich 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 top
und 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, bash
nachdem 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; bash
als ein Befehl interpretiert wird.