it-swarm-eu.dev

Wie kann ich mit einem Startprogramm für eine Terminalanwendung das Terminal nach Abschluss des Programms geöffnet lassen?

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?

24
Eugene M

Unter der Annahme, dass Ihr Befehl mycommand heißt, 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
23
Oli

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.

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"
8
mivk

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 werden feststellen, dass Shell bei Misserfolgen besonders nützlich ist. 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-Shell

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

Fügen Sie diese Datei irgendwo ein, z. B. ~/bin, und verwenden Sie dann in Ihrem Launcher "success-or-Shell your original command".

3
Roger Pate

Verwenden Sie den Befehl watch.

Format: watch -n60 myCommand oder watch -n60 "my command string"

  • der -n gibt die Anzahl der Sekunden an, die zwischen den Aufrufen von myCommand gewartet werden soll. Beispiel: Der obige Befehl ruft myCommand alle 60 Sekunden für immer auf.
  • Wenn der Befehl aus mehreren Wörtern besteht, setzen Sie ihn 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 jetzt alle 60 Sekunden df -h 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.

0
Gabriel Staples

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 enter image description here

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

0
nathanfranke

Diese Antwort gibt die beste Antwort, die ich bisher gesehen habe, um 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
0