Dans un script bash, comment vérifier si «-e» est défini? [dupliquer]

Oct 20 2020

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

6 glennjackman Oct 19 2020 at 23:38

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
3 user1686 Oct 19 2020 at 23:36

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.