Código de salida al final de un script bash

Pregunta:

Estoy confundido sobre el significado del código de salida al final de un script de bash: sé que el código de salida 0 significa que terminó correctamente y que hay muchos más números de códigos de salida (¿127 si no me equivoco?)

Mi pregunta es acerca de cuando veo el código de salida 0 al final de un script, ¿fuerza el código de salida como 0 incluso si el script falló o tiene otro significado?

Respuesta:

La exit comando incorporado sale del shell (de la referencia de Bash ):

exit [n]
Salga del shell, devolviendo un estado de n al padre del shell. Si se omite n, el estado de salida es el del último comando ejecutado. Cualquier captura en EXIT se ejecuta antes de que termine el shell.

La ejecución hasta el final del archivo también sale, devolviendo el código de retorno del último comando, así que sí, una exit 0 final exit 0 hará que el script salga con un estado exitoso independientemente del estado de salida de los comandos anteriores. (Es decir, asumiendo que la secuencia de comandos llega a la exit final). Al final de una secuencia de comandos, también puede usar true o : para obtener un código de salida de cero.

Por supuesto, más a menudo usaría exit desde adentro y if para terminar el script en el medio.

Estos deberían imprimir un 1 ( $? Contiene el código de salida devuelto por el comando anterior):

sh -c "false" ; echo $?
sh -c "false; exit" ; echo $?

Si bien esto debería imprimir un 0:

sh -c "false; exit 0" ; echo $?

No estoy seguro de si el concepto de que el script "falla" al ejecutar una exit tiene sentido, ya que es muy posible que algunos comandos ejecutados por el script fallen, pero que el script en sí tenga éxito. Depende del autor del guión decidir qué es un éxito y qué no.

Además, el rango estándar para los códigos de salida es 0..255. El shell utiliza los códigos superiores a 127 para indicar un proceso terminado por una señal, pero pueden devolverse de la forma habitual. La llamada al sistema de wait realidad devuelve un valor más amplio, y el resto contiene bits de estado establecidos por el sistema operativo.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım