In uno script bash, come posso verificare se "-e" è impostato? [duplicare]
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
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
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.