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


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?


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.