Comment annuler l'effet de "set -e" qui fait sortir bash immédiatement si une commande échoue?


205

Après être entré set -edans un shell bash interactif, bash se fermera immédiatement si une commande se termine avec une valeur non nulle. Comment annuler cet effet?

Réponses:


309

Avec set +e. Oui, c'est en arrière que vous activez les options du shell avec set -et les désactivez avec set +. Raisins secs historiques, donchanow.


Merci beaucoup, c'est parmi les toutes dernières lignes de la page de manuel correspondante ( faqs.org/docs/bashman/bashref_56.html ) que je n'ai pas lue jusqu'à la fin.
Tianyi Cui

Le manuel bash est incroyablement énorme, c'est vrai. (Pour info, puisque vous semblez être nouveau: c'est la chose faite de cliquer sur la coche sous la meilleure réponse à votre question, cela s'appelle "l'accepter".)
zwol

12
Malheureusement, le langage shell Unix (dont la plupart n'est pas spécifique à «bash») est l'un des langages de programmation les moins cohérents en interne encore largement utilisé aujourd'hui. Vous allez devoir apprendre beaucoup plus de ces petites verrues. Et je dirais que c'est un bug de documentation, là.
zwol

10
les raisins historiques sont l'enfer des raisins secs!
James

2
Enfin, un dénigrement injuste de Bash: single dash est l'option de ligne de commande shell POSIX standard, et donc le plus naturel pour "faire quelque chose". +c'est comme -mais traverser quelque chose signifie "pas" comme dans "≠".
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

68

Il peut être difficile à utiliser set +e/ set -echaque fois que vous souhaitez le remplacer. J'ai trouvé une solution plus simple.

Au lieu de le faire comme ceci:

set +e
command_that_might_fail_but_we_want_to_ignore_it
set -e

vous pouvez le faire comme ceci:

command_that_might_fail_but_we_want_to_ignore_it || true

ou, si vous souhaitez enregistrer les frappes et que cela ne vous dérange pas d'être un peu cryptique:

command_that_might_fail_but_we_want_to_ignore_it || :

J'espère que cela t'aides!


11
:Je me posais des questions sur l'histoire et j'ai trouvé ma réponse ici , au cas où quelqu'un d'autre serait curieux.
3cheesewheel

4
Cela ne s'applique que si vous ne vous souciez pas du code retour de la commande que vous exécutez.
Isaac

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.