Sie können verwenden .exec ./your-script
Ein Terminal-Emulator wie GNOME Terminal wird beendet, wenn der darin ausgeführte erste Prozess - normalerweise eine Shell - beendet wird.
Wenn Sie sich bereits in einem Terminal befinden und Sie vor dem Beenden dieses Terminals nur noch ein bestimmtes Skript (oder Programm) ausführen möchten, benötigen Sie die Shell, die in diesem Terminal ausgeführt wird, nicht mehr. So können Sie die exec
eingebaute Shell verwenden, um die Shell zu erstellen durch den von Ihrem Befehl erstellten Prozess zu ersetzen .
- Im Fall Ihres Skripts ist das ein weiterer Shell-Prozess - genau wie in einer Sekunde Shell-Prozess erstellt wird, wenn Sie ein Skript ohne ausführen
exec
.
Die Syntax lautet exec command
z .exec ./your-script
exec
: ein Beispiel
Angenommen, ich habe ein Shell-Skript namens count
, das als ausführbar markiert ist und sich im aktuellen Verzeichnis befindet. Es beinhaltet:
#!/usr/bin/env bash
for i in {5..1}; do echo $i; sleep 1; done
Und in einem Terminal laufe ich:
exec ./count
Dies druckt die Ziffern 5
, 4
, 3
,2
, und 1
, eine pro Sekunde, und dann das Terminal - Fenster schließt.
Wenn Sie dies von einem anderen Prozess als dem ersten ausführen, der in Ihrem Terminal ausgeführt wird - wenn Sie beispielsweise bash
zuerst eine andere Shell-Instanz gestartet haben -, kehren Sie zu der Shell zurück, die diesen Prozess erstellt hat, anstatt das Terminal zu beenden. (Diese Einschränkung gilt auch für exit
Methoden auf der Grundlage von.)
Sie können verwenden ../your-script; exit
Wenn Sie nicht möchten, dass sich Ihre Shell durch den neuen Prozess (über exec
) ersetzt, können Sie festlegen, dass sie weiterhin aktiv bleibt, sich jedoch sofort nach Abschluss des neuen Prozesses selbst beendet.
Führen Sie dazu Ihren Befehl und den exit
durch getrennte Befehle aus, ;
damit sie in einer Zeile angegeben werden können.
Die Syntax lautetcommand; exit
z ../your-script; exit
command; exit
gegen command && exit
Sie werden feststellen, dass dies der in den Antworten von kos und heemayl vorgeschlagenen Methode ähnelt . Der Unterschied ist, dass:./your-script && exit
&&
Führt den zweiten Befehl nur aus, wenn der erste Befehl durch Zurückgeben eines Beendigungscodes von Null als erfolgreich gemeldet wurde .
;
Führt den zweiten Befehl aus, unabhängig davon, ob der erste Befehl erfolgreich war oder nicht.
Welches Sie möchten, hängt von der jeweiligen Situation ab. Wenn der Befehl fehlschlägt, soll die aufrufende Shell (und das Hosting-Terminal) aktiv bleiben? Wenn ja, verwenden Sie &&
; wenn nicht, benutze ;
.
Es gibt auch command || exit
, die die aufrufende Shell nur beendet, wenn ein Fehlercommand
gemeldet wird .