Wie und warum schließt "exec false" das Terminal?

8

Ich weiß, dass dies wahrscheinlich eine relativ sinnlose Frage ist, aber ich bin gespannt, warum exec falsedas Terminal genauso geschlossen wird wie dies der exitFall ist.

Ich würde auch gerne wissen, ob dies ein akzeptabler Weg ist, um das Terminal zu schließen oder nicht.

Drachenliebhaber
quelle
Auch relevante Lektüre: Was ist der Unterschied zwischen eval und exec?
Sergiy Kolodyazhnyy

Antworten:

10

exec falseersetzt die aktuelle Shell durch die Ausführung des Befehls false(hier nicht die eingebaute Shell, sondern eine /bin/falsebeliebige falseausführbare Datei, die zuerst in der kommt PATH), die schnell beendet wird. Wenn die Shell der oberste Prozess war, der in Ihrem Terminalemulator ausgeführt wird, werden keine Prozesse mehr ausgeführt, sodass der Terminalemulator geschlossen wird.

Dies ist eine akzeptable Alternative zum Schließen eines Terminals, genau wie bei vielen ähnlichen Befehlen:

exec true
exec sleep 0
exec echo
...

Siehe auch: Was macht ein Exec-Befehl?

jlliagre
quelle
Als Randnotiz bashwird vor dem Aufrufen eine bestimmte Bereinigung durchgeführt, execeinschließlich des Schreibens von Befehlen an .bash_history. Wenn Sie also einfach .bash_historyim selben Terminalfenster speichern und eine neue Shell starten möchten, können Sie dies durch Eingabe tun exec bash.
Kasperd
Ok, danke, du hast meine Frage perfekt beantwortet :)
Drachenliebhaber
Und eine gute Frage! deshalb beide positiv bewertet! ;)
Fabby
@jiliagre execruft Befehle auf, die in gefunden wurden PATH, keine eingebauten. Gibt beispielsweise exec [[ $USER = root ]]einen bash: exec: [[: not foundFehler zurück. Im Fall von OP falseheißt das is /bin/falseund nicht die eingebaute Shell. Ansonsten gute Antwort, daher +1. Als Randnotiz execkann dies eine Art Abschaltbefehl sein, dh wenn diese drei Befehle in Ihrem Beispiel in ein Skript umgewandelt würden, würde nichts darüber hinaus execerreicht werden, da execdie vom Skript aufgerufene Shell durch den Befehl auf der rechten Seite ersetzt würde von exec.
Sergiy Kolodyazhnyy