Wird exec echo "some "; echo "test"
in bash niemals „some test“ ausgeben?
Ich würde eine Bestätigung dieser Frage suchen, da ich ein kleines Shell-Skript schreibe und möchte, dass es nach dem exec
nichts fortsetzt Befehl wurde aufgerufen.
Ich denke, dass ich mir keine Sorgen machen müsste, wie ich es verstehe, nach Rücksprache mit:
man 3 exec
man 1p exec
Die Shell-Skripte werden, wenn sie von der Shell ausgeführt werden, make
- die Shell führt das Programm
exec
aus , die - verwendet den
exec***
Familie Systemaufrufe, die die Shell/Bash ersetzen, die das Skript ausgeführt hat, dadurch behindert weitere Aktionen der Shell (die „ersetzt“ wurde)
Wie zuvor dargelegt, besteht das Hauptziel dieser Frage darin, eine Bestätigung für meine Argumentation zu suchen, um zu verhindern, dass irgendetwas im Skript nach der Ausführung auftritt (z. B. echo test
) ausgeführt werden.
Ich würde mich über eine möglichst allgemeine Antwort (POSIX) freuen, aber nur im Falle von Besonderheiten interessiere ich mich am meisten für GNU/Linux und GNU/Bash
Akzeptierte Antwort:
exec
beendet das Skript immer if es führt einen Befehl aus und tut dies erfolgreich (nicht im Zusammenhang mit dem Exit-Code des Befehls, sondern mit seinem Start).
exec
kann auf sehr nützliche Weise ohne Befehl ausgeführt werden:Um Dateideskriptoren dauerhaft umzuleiten:
exec 3>/path/to/file
Wenn der Befehl nicht gestartet werden kann, hängt das Verhalten der Shell von der Konfiguration ab. bash
wird standardmäßig beendet.
Verwenden Sie stattdessen am besten eine Funktion:
safe_exec () {
cmd="$1"
if test -z "$cmd" || ! test -f "$cmd" || ! test -x "$cmd"; then
exit 1
else
exec "[email protected]"
fi
}
safe_exec echo "some "; echo "test"