¿Qué hace set -e?


28

Tengo un script que encontré y estoy tratando de ejecutarlo, solo descarga e instala las bibliotecas de tiempo de ejecución de Apache. La primera línea es set -ey está causando un error; ¿qué set -ehacer?

Respuestas:


22

Esta construcción es tan complicada que merece su propia sección.

set le permite cambiar los valores de las opciones de shell y establecer los parámetros posicionales, o mostrar los nombres y valores de las variables de shell.

La -eopcion

-mi

Salga inmediatamente si hay una canalización (vea Tuberías), que puede consistir en un solo comando simple (vea Comandos simples), un comando subshell entre paréntesis (vea Agrupación de comandos) o uno de los comandos ejecutados como parte de una lista de comandos encerrada por llaves (ver Agrupación de comandos) devuelve un estado distinto de cero. El shell no sale si el comando que falla es parte de la lista de comandos inmediatamente después de un tiempo o hasta la palabra clave, parte de la prueba en una declaración if, parte de cualquier comando ejecutado en un && o || lista excepto el comando que sigue al && o || final, cualquier comando en una tubería pero el último, o si el estado de retorno del comando se invierte con!. Una trampa en ERR, si se establece, se ejecuta antes de que salga el shell.

Esta opción se aplica al entorno de shell y a cada entorno de subshell por separado (consulte Entorno de ejecución de comandos) y puede hacer que los subshells salgan antes de ejecutar todos los comandos en el subshell.

Fuente: www.gnu.org

Editado debido al comentario de @ psusi a continuación.

Además puedes leer la página del manual de bash

man bash 

en la sección: SHELL BUILTIN COMMANDS

o problema

help set 

para un breve mensaje de ayuda.


1
Dado que es un comando incorporado, lo que desea help setes el manual completo de bash info bash, si tiene instalado bash-doc.
psusi

Gracias por la aclaración @psusi. help sety / o man bashson los correctos para set.
NickTux

12

set -e en resumen, cuando está en la parte superior de su script bash, le dice al script que salga tan pronto como una línea del script falle (con algunas excepciones enumeradas en el manual). [1]

Como opción de depuración, a menudo se usa con set -x, que es imprimir cada línea de comando expandida antes de la ejecución con un signo "+". [2]

Ver más en:

[1] https://www.peterbe.com/plog/set-ex

[2] http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html


2
Gracias por una simple explicación. A menudo veo set -xe en Dockerfiles y ahora sé la razón :)
ymakux
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.