¿Cómo deshacer el efecto de "set -e" que hace que bash salga inmediatamente si algún comando falla?

205

Después de ingresar set -een un shell bash interactivo, bash saldrá inmediatamente si algún comando sale con un valor distinto de cero. ¿Cómo puedo deshacer este efecto?

Tianyi Cui
fuente

Respuestas:

309

Con set +e. Sí, es hacia atrás que habilitas las opciones de shell set -y las deshabilitas con set +. Pasas históricas, donchanow.

zwol
fuente
Muchas gracias, está entre las últimas líneas de la página del manual correspondiente ( faqs.org/docs/bashman/bashref_56.html ) que no leí hasta el final.
Tianyi Cui
El manual de bash es enorme, es cierto. (Para su información, ya que parece ser nuevo: es el acto realizado para hacer clic en la marca de verificación en la mejor respuesta a su pregunta, esto se llama "aceptar" la misma.)
Zwol
12
Lamentablemente, el lenguaje de shell Unix (la mayoría de los cuales no es específico de 'bash') es uno de los lenguajes de programación menos consistentes internamente que todavía se usa ampliamente en la actualidad. Tendrás que aprender muchas más de estas pequeñas verrugas. Y yo diría que es un error de documentación, allí.
zwol
10
¡Las uvas históricas son pasas del infierno!
James
2
Finalmente, un ataque injusto de Bash: un solo guión es la opción de línea de comando de shell POSIX estándar y, por lo tanto, es más natural para "hacer algo". +es como -cruzar algo significa "no" como en "≠".
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
68

Puede ser desagradable usarlo set +e/ set -ecada vez que desee anularlo. Encontré una solución más simple.

En lugar de hacerlo así:

set +e
command_that_might_fail_but_we_want_to_ignore_it
set -e

puedes hacerlo así:

command_that_might_fail_but_we_want_to_ignore_it || true

o, si desea guardar las pulsaciones de teclas y no le importa ser un poco críptico:

command_that_might_fail_but_we_want_to_ignore_it || :

¡Espero que esto ayude!

szeryf
fuente
11
:Me preguntaba sobre la historia de , y encontré mi respuesta aquí , en caso de que alguien más tenga curiosidad.
3cheesewheel
44
Esto se aplica solo si no le importa el código de retorno del comando que está ejecutando.
Isaac
20
  • El uso de + en lugar de - hace que estas banderas se apaguen.

Fuente

mhitza
fuente