Si une fonction shell a besoin d'un paramètre spécifique de -e / + e pour fonctionner, est-il possible de définir ce paramètre localement, puis de le restaurer à son paramètre précédent avant de quitter la fonction?
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
la source
la source
$-
fonctionne également dans/bin/sh
et vous n'avez probablement pas besoin de bashismes pour l'analyser, utilisez simplement par exemple un globbing quicase
fournitVous pouvez lire la valeur de l'indicateur via la variable SHELLOPTS:
Vous voyez qu'après le réglage
set -e
, la valeurerrexit
dans$SHELLOPTS
apparaît. Vous pouvez le vérifier à partir de là.Cependant, vous pouvez contourner cela (si vous le souhaitez!) En vous rappelant le point suivant: selon le manuel :
Ainsi, si vous exécutez votre fonction dans un sous-shell, comme
vous n'avez pas à vous soucier de savoir si la
errexit
variable est définie ou non dans l'environnement d'appel, et vous pouvez la définir comme vous le souhaitez.la source
myfunction
appels pourmyfunction || true
supprimer l'effet de -e pour les appels et ne pas avoir à faireset +e
à l'intérieur de la fonction en premier lieu.