
Der Befehl „set -e“ führt dazu, dass ein Bash-Skript sofort fehlschlägt, wenn ein beliebiger Befehl einen Exit-Code ungleich Null zurückgibt.
Gibt es eine einfache und elegante Möglichkeit, dieses Verhalten für einen einzelnen Befehl innerhalb eines Skripts zu deaktivieren?
An welchen Stellen ist diese Funktionalität im Bash-Referenzhandbuch dokumentiert (http://www.gnu.org/software/bash/manual/bashref.html)?
Antwort1
Etwas wie das:
#!/usr/bin/env bash set -e echo hi # disable exitting on error temporarily set +e aoeuidhtn echo next line # bring it back set -e ao echo next line
Laufen:
$ ./test.sh hi ./test.sh: line 7: aoeuidhtn: command not found next line ./test.sh: line 11: ao: command not found
Es wird in
set
der integrierten Hilfe beschrieben:$ type set set is a shell builtin $ help set (...) Using + rather than - causes these flags to be turned off.
Das Gleiche ist hier dokumentiert:https://www.gnu.org/software/bash/manual/bashref.html#The-Set-Builtin.
Antwort2
Eine Alternative zur Rücknahme der Kaution bei einem Fehler wäre, auf jeden Fall einen Erfolg zu erzwingen. Sie können so etwas tun:
cmd_to_run || true
Das gibt 0 (true) zurück, daher sollte set -e nicht ausgelöst werden
Antwort3
Wenn Sie versuchen, den Rückgabe-/Fehlercode (Funktion oder Fork) abzufangen, funktioniert dies:
function xyz {
return 2
}
xyz && RC=$? || RC=$?
Antwort4
Ein anderer Ansatz, den ich ziemlich einfach finde (und der set
neben auch für andere Optionen gilt -e
):
Verwenden Sie es, $-
um die Einstellungen wiederherzustellen.
Zum Beispiel:
oldopt=$-
set +e
# now '-e' is definitely disabled.
# do some stuff...
# Restore things back to how they were
set -$oldopt
Allerdings sind -e
die von anderen speziell erwähnten Optionen ( || true
oder „in ein setzen if
“) möglicherweise idiomatischer.