In uno script bash, come posso verificare se "-e" è impostato? [duplicare]

Oct 20 2020

Lo uso set -enegli script abbastanza spesso, ma a volte va bene che uno script fallisca in alcuni dei suoi comandi.
Ho provato a verificare se set -eera ON, ma non sono riuscito a trovare un modo per farlo - non c'è alcuna opzione (che io sappia) in setquanto fornirà il valore corrente.
Ho anche provato questo: set | grep errexit( errexitè il nome dell'opzione per -e) e set | grep "-e", senza fortuna.
Vorrei controllare se l' errexitopzione è impostata, in modo da poterla disabilitare temporaneamente in alcune delle mie funzioni di libreria che ho costruito nel tempo (usando set +ee riapplicando set -ese necessario). Qualcosa di simile a:

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

Risposte

6 glennjackman Oct 19 2020 at 23:38

Controlla se la $-variabile contienee

if [[ $- == *e* ]]

Vedere Parametri speciali nel manuale.


Per le shell POSIX, caseè lo strumento integrato per la corrispondenza dei modelli

case $- in
*e*) doSomething ;;
esac
3 user1686 Oct 19 2020 at 23:36

All'interno di bash (ma non di base sh), puoi usare shopt -o -p errexit. Il suo output può essere memorizzato e successivamente valutato per ripristinare il valore iniziale. (Restituirà anche 0 se l'opzione è impostata, 1 altrimenti.)

errexit inoltre non si attiverà in molti casi anche se abilitato, come se il comando fallito fosse usato insieme a ||- per esempio this_can_fail || trueti permetterà di ignorare solo quel comando.

Inoltre non si attiverà se il comando faceva parte di una ifcondizione, ad es if ! this_can_fail; then echo "Warning: it failed"; fi.