¿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?

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.


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!


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.