Como desfazer o efeito de "set -e" que faz com que o bash saia imediatamente se algum comando falhar?

205

Após entrar set -eem um shell bash interativo, o bash será encerrado imediatamente se algum comando sair com um valor diferente de zero. Como posso desfazer esse efeito?

Tianyi Cui
fonte

Respostas:

309

Com set +e. Sim, é para trás que você ativaset - e desativa as opções de shell set +. Passas históricas, agora.

zwol
fonte
Muito obrigado, está entre as últimas linhas da página do manual correspondente ( faqs.org/docs/bashman/bashref_56.html ) que não li até o fim.
Tianyi Cui
O manual do bash é assustadoramente enorme, é verdade. (FYI, uma vez que você parece ser nova: é a coisa feita para clicar a marca de verificação sob a melhor resposta para a sua pergunta, isso é chamado de "aceitar"-lo.)
Zwol
12
Infelizmente, a linguagem shell Unix (a maioria das quais não é específica para 'bash') é uma das linguagens de programação menos consistentes internamente ainda hoje em uso amplo. Você terá que aprender muito mais dessas pequenas verrugas. E eu diria que é um bug de documentação lá.
Zwol 18/08/10
10
uvas históricas são passas inferno!
James
2
Finalmente, um golpe injusto no Bash: single dash é a opção de linha de comando do shell POSIX padrão e, portanto, mais natural para "fazer alguma coisa". +é como, -mas atravessar algo significa "não" como em "≠".
Ciro Santilli respondeu
68

Pode ser difícil de usar set +e/ set -esempre que você deseja substituí-lo. Encontrei uma solução mais simples.

Em vez de fazer assim:

set +e
command_that_might_fail_but_we_want_to_ignore_it
set -e

você pode fazer assim:

command_that_might_fail_but_we_want_to_ignore_it || true

ou, se você deseja salvar as teclas digitadas e não se importa de ser um pouco enigmático:

command_that_might_fail_but_we_want_to_ignore_it || :

Espero que isto ajude!

szeryf
fonte
11
Estava pensando sobre a história de :, e encontrei a minha resposta aqui , caso alguém mais esteja curioso.
3cheesewheel
4
Isso se aplica apenas se você não se importa com o código de retorno do comando que está executando.
Isaac
20
  • Usar + em vez de - faz com que esses sinalizadores sejam desativados.

Fonte

mhitza
fonte