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.