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?

Eugene M
quelle

Antworten:

23

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:

xterm -e "mycommand" hold
Oli
quelle
7
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 :-)
Invertzucker
1
xterm -hold -e mycommand
8

Ihr Launcher führt ein Skript aus, oder?

Am Ende Ihres Skripts fügen Sie hinzu

read -p "Press any key to exit > " -n1 junk
echo 

Dann wartet Ihr Skript, bis Sie es beenden.

Richard Holloway
quelle
1
+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

Exec=gnome-terminal -x bash -c "YOUR_SCRIPT; exec $SHELL"

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:

Exec=gnome-terminal -x bash -c "YOUR_SCRIPT \"arg with spaces\"; exec $SHELL"
mivk
quelle
3

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

#!/bin/sh
[ $# -eq 0 ] && {
  echo "$(basename $0): no command" >&2
  exit 1
}
"$@" || {
  echo "failed: $?"
  exec $SHELL
}

Platzieren Sie diese Datei an einem Ort, z. B. ~ / bin, und verwenden Sie in Ihrem Launcher "Erfolg oder Shell Ihres ursprünglichen Befehls".


quelle
0

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
Brian Vandenberg
quelle
0

Verwenden Sie den watchBefehl.

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.

Gabriel Staples
quelle
0

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 Bildbeschreibung hier eingeben

In der .desktop-Datei sollte sich der Eintrag befinden X-KeepTerminal=true

Nathanfranke
quelle