Dans un script bash, comment vérifier si «-e» est défini? [dupliquer]
J'utilise set -eassez souvent dans les scripts, mais parfois, il est normal qu'un script échoue dans certaines de ses commandes.
J'ai essayé de vérifier si set -eétait activé, mais je n'ai pas trouvé de moyen de le faire - il n'y a pas d'option (à ma connaissance) setqui fournira la valeur actuelle.
Également essayé ceci: set | grep errexit( errexitest le nom de l'option pour -e) et set | grep "-e", pas de chance là-bas.
Je voudrais vérifier si l' errexitoption est définie, afin de pouvoir la désactiver temporairement dans certaines de mes fonctions de bibliothèque que j'ai construites au fil du temps (en utilisant set +eet en réappliquant set -esi nécessaire). Quelque chose comme:
if [ errexit is set ]; then
ERR_EXIT=1
set +e
fi
...
run some code that may fail
...
if [ "${ERR_EXIT}" = 1 ]; then
set -e
fi
Réponses
Vous vérifiez si la $-variable contiente
if [[ $- == *e* ]]
Voir Paramètres spéciaux dans le manuel.
Pour les shells POSIX, caseest l'outil intégré pour la correspondance de modèles
case $- in
*e*) doSomething ;;
esac
Dans bash (mais pas dans sh basique), vous pouvez utiliser shopt -o -p errexit. Sa sortie peut être stockée et évaluée ultérieurement pour restaurer la valeur initiale. (Il renverra également 0 si l'option est définie, 1 sinon.)
errexit ne se déclenchera pas non plus dans plusieurs cas, même s'il est activé, par exemple si la commande défaillante a été utilisée avec ||- par exemple this_can_fail || true, vous permettra d'ignorer uniquement cette commande.
Il ne se déclenchera pas non plus si la commande faisait partie d'une ifcondition, par exemple if ! this_can_fail; then echo "Warning: it failed"; fi.