Wie kann ich mit einem Startprogramm für eine Terminalanwendung das Terminal nach Abschluss des Programms geöffnet lassen?
24
Ich habe einen Terminalbefehl, den ich über einen Anwendungsstarter ausführe. Das funktioniert prima, aber manchmal schlägt der Befehl fehl. Ich möchte, dass das Terminal geöffnet bleibt, damit ich die Ergebnisse sehen kann. Wie kann ich das machen?
Unter der Annahme, dass Ihr Befehl aufgerufen wird mycommand, würde ich meinen Launcher so ändern, dass er Folgendes ausführt:
gnome-terminal -e "mycommand|less"
Wenn Sie eine dauerhaftere, vielleicht sauberere Lösung wünschen, öffnen Sie gnome-terminal, gehen Sie zu Bearbeiten, Profileinstellungen und klicken Sie auf die Registerkarte Titel und Befehl. Ändern Sie die Option "Wenn Befehl beendet wird" in "Terminal offen halten".
Wenn Sie Befehle ausführen, sollte das Terminal jetzt geöffnet bleiben, wenn etwas ausgeführt wird.
Bearbeiten: Wenn dir das Terminal nicht wirklich wichtig ist, kannst du einfach das Hold-Flag von xterm verwenden:
Damit das Standardterminal beim Beenden des Befehls weiterhin aktiv bleibt, schlage ich vor, ein neues Terminalprofil zu erstellen, das nach dem Beenden eines Befehls geöffnet bleibt, und gnome-terminal die --tab-with-profile=PROFILENAMEOption zu übergeben. Sie können für verschiedene bahaviours viele Profile haben auf diese Weise :-)
+1, und um die Eingabeaufforderung nur anzuzeigen, wenn der Befehl fehlschlägt (einen Exit-Code ungleich Null zurückgibt), kann man Folgendes tuncommand || read -n1 -p "Command failed. Press any key to exit..."
Jukka Matilainen
8
Verwenden Sie diese Option in Ihrer Desktop-Verknüpfung
Ein etwas anderer Ansatz als die anderen Antworten: Führen Sie Ihren Befehl aus, und wenn dies fehlschlägt, erzeugen Sie eine Shell. Auf diese Weise müssen Sie das Terminal nicht offen halten (was nicht zwischen Erfolg oder Misserfolg von Befehlen unterscheidet), und Sie finden diese Shell möglicherweise besonders nützlich bei Misserfolgen. Verwenden Sie zum Schließen einfach Strg + D (EOF), "Beenden", Alt + F4 (oder was auch immer Ihr Fenstermanager zum Schließen von Fenstern verwendet) usw.
Diese Antwort gibt die beste Antwort, die ich bisher gesehen habe, um das zu tun, was Sie wollen. Sie empfehlen, ein Skript mit den auszuführenden Befehlen zu erstellen und es mit dem Parameter --init-file zu verwenden (bash-spezifisch, aber Sie könnten wahrscheinlich dasselbe für csh / tcsh / zsh usw. tun):
#!/bin/bash --init-file
commands to run
... und führe es aus als:
xterm -e /path/to/script
# or
gnome-terminal -e /path/to/script
# or
the-terminal -e bash --init-file /path/to/script/with/no/shebang
Format: watch -n60 myCommandoderwatch -n60 "my command string"
Die -nangegebene Anzahl von Sekunden, die zwischen den Aufrufen von myCommand gewartet werden soll . Beispiel: Der obige Befehl ruft myCommand für immer alle 60 Sekunden auf.
Wenn der Befehl mehrere Wörter ist, legte es in doppelte Anführungszeichen: "my command string".
Angenommen, Sie möchten einen Launcher, der die Festplattennutzung anzeigt und für den Leser sichtbar bleibt. Ich würde einfach diesen Befehl im Launcher: verwenden watch -n60 "df -h", der df -hjetzt alle 60 Sekunden aufruft .
Mir gefällt dies über die akzeptierte Antwort von, gnome-terminal -e "mycommand|less"da ich Xubuntu verwende, das standardmäßig ein anderes Terminal verwendet.
--tab-with-profile=PROFILENAME
Option zu übergeben. Sie können für verschiedene bahaviours viele Profile haben auf diese Weise :-)xterm -hold -e mycommand
Ihr Launcher führt ein Skript aus, oder?
Am Ende Ihres Skripts fügen Sie hinzu
Dann wartet Ihr Skript, bis Sie es beenden.
quelle
command || read -n1 -p "Command failed. Press any key to exit..."
Verwenden Sie diese Option in Ihrer Desktop-Verknüpfung
Nachdem Ihr Skript fertig ist, wird der Bash-Prozess durch einen neuen Aufruf von sich selbst ersetzt.
Wenn Sie Ihrem Skript Argumente in Anführungszeichen übergeben müssen, müssen Sie die Anführungszeichen umgehen:
quelle
Ein etwas anderer Ansatz als die anderen Antworten: Führen Sie Ihren Befehl aus, und wenn dies fehlschlägt, erzeugen Sie eine Shell. Auf diese Weise müssen Sie das Terminal nicht offen halten (was nicht zwischen Erfolg oder Misserfolg von Befehlen unterscheidet), und Sie finden diese Shell möglicherweise besonders nützlich bei Misserfolgen. Verwenden Sie zum Schließen einfach Strg + D (EOF), "Beenden", Alt + F4 (oder was auch immer Ihr Fenstermanager zum Schließen von Fenstern verwendet) usw.
Erfolg-oder-Schale
Platzieren Sie diese Datei an einem Ort, z. B. ~ / bin, und verwenden Sie in Ihrem Launcher "Erfolg oder Shell Ihres ursprünglichen Befehls".
quelle
Diese Antwort gibt die beste Antwort, die ich bisher gesehen habe, um das zu tun, was Sie wollen. Sie empfehlen, ein Skript mit den auszuführenden Befehlen zu erstellen und es mit dem Parameter --init-file zu verwenden (bash-spezifisch, aber Sie könnten wahrscheinlich dasselbe für csh / tcsh / zsh usw. tun):
... und führe es aus als:
quelle
Verwenden Sie den
watch
Befehl.Format:
watch -n60 myCommand
oderwatch -n60 "my command string"
-n
angegebene Anzahl von Sekunden, die zwischen den Aufrufen von myCommand gewartet werden soll . Beispiel: Der obige Befehl ruft myCommand für immer alle 60 Sekunden auf."my command string"
.Angenommen, Sie möchten einen Launcher, der die Festplattennutzung anzeigt und für den Leser sichtbar bleibt. Ich würde einfach diesen Befehl im Launcher: verwenden
watch -n60 "df -h"
, derdf -h
jetzt alle 60 Sekunden aufruft .Mir gefällt dies über die akzeptierte Antwort von,
gnome-terminal -e "mycommand|less"
da ich Xubuntu verwende, das standardmäßig ein anderes Terminal verwendet.quelle
Versuchen Sie, mit der rechten Maustaste auf den Launcher zu klicken und Eigenschaften einzugeben.
Es sollte eine Option geben, mit der das Terminalfenster geöffnet bleibt
In der .desktop-Datei sollte sich der Eintrag befinden
X-KeepTerminal=true
quelle