Come annullare l'effetto di "set -e" che fa uscire immediatamente bash se un comando fallisce?


205

Dopo essere entrato set -ein una shell bash interattiva, bash uscirà immediatamente se un comando esce con un valore diverso da zero. Come posso annullare questo effetto?

Risposte:


309

Con set +e. Sì, è a ritroso che abiliti le opzioni di shell con set -e le disabiliti con set +. Uvetta storica, donchanow.


Grazie mille, è tra le ultime righe della corrispondente pagina di manuale ( faqs.org/docs/bashman/bashref_56.html ) che non ho letto fino alla fine.
— Tianyi Cui,

Il manuale di Bash è tremendamente enorme, è vero. (Cordiali saluti, dato che sembri essere nuovo: è una cosa fatta fare clic sul segno di spunta sotto la migliore risposta alla tua domanda, questo si chiama "accettarlo".)
— zwol

12
Purtroppo, il linguaggio shell Unix (la maggior parte dei quali non è specifico di "bash") è uno dei linguaggi di programmazione meno coerenti internamente ancora oggi ampiamente utilizzati. Dovrai imparare molto di più su queste piccole verruche. E direi che è un bug di documentazione, lì.
— zwol,

10
uve storiche sono l'inferno dell'uva passa!
— James,

2
Infine, un ingiusto bashing di Bash: single dash è l'opzione standard della riga di comando della shell POSIX, e quindi più naturale per "fare qualcosa". +è come -ma attraversare qualcosa significa "non" come in "≠".
— Ciro Santilli 29 冠状 病 六四 事件 法轮功

68

Potrebbe non essere corretto usarlo set +e/ set -eogni volta che si desidera sovrascriverlo. Ho trovato una soluzione più semplice.

Invece di farlo in questo modo:

set +e
command_that_might_fail_but_we_want_to_ignore_it
set -e

puoi farlo in questo modo:

command_that_might_fail_but_we_want_to_ignore_it || true

o, se vuoi salvare i tasti premuti e non ti dispiace essere un po 'criptico:

command_that_might_fail_but_we_want_to_ignore_it || :

Spero che questo ti aiuti!


11
:Mi stavo chiedendo della storia di , e ho trovato la mia risposta qui , nel caso qualcun altro fosse curioso.
— 3cheesewheel,

4
Questo vale solo se non ti interessa il codice di ritorno del comando che stai eseguendo.
— Isaac,

20
  • L'uso di + anziché di - provoca la disattivazione di questi flag.

fonte

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.