Wenn eine Shell-Funktion eine bestimmte Einstellung von -e / + e benötigt, um zu funktionieren, ist es möglich, diese Einstellung lokal festzulegen und dann auf ihre vorherige Einstellung zurückzusetzen, bevor die Funktion beendet wird?
myfunction()
{
# Query here if -e is set and remember in a variable?
# Or push the settings to then pop at the end of the function?
set +e
dosomething
doanotherthing
# Restore -e/+e as appropriate, don't just do unconditional set -e
}
bash
shell-script
usta
quelle
quelle
$-
auch funktioniert/bin/sh
und Sie wahrscheinlich keine Bashismen benötigen, um es zu analysieren. Verwenden Sie einfach zB Globbing, dascase
bereitstelltSie können den Flag-Wert über die Variable SHELLOPTS lesen:
Sie sehen, dass nach dem Einstellen
set -e
der Werterrexit
in$SHELLOPTS
angezeigt wird. Sie können es von dort aus überprüfen.Sie können dies jedoch umgehen (wenn Sie möchten!), Indem Sie sich an folgenden Punkt erinnern: gemäß Handbuch :
Wenn Sie also Ihre Funktion in einer Subshell ausführen, wie z
Sie müssen sich keine Sorgen machen, ob die
errexit
Variable in der aufrufenden Umgebung festgelegt ist oder nicht, und Sie können sie nach Ihren Wünschen festlegen.quelle
myfunction
Aufrufe ändernmyfunction || true
, um den Effekt von -e für die Aufrufe zu unterdrücken, und muss nicht erstset +e
innerhalb der Funktion arbeiten.