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ó con éxito y que hay muchos más números de códigos de salida (127 si no me equivoco?)
Mi pregunta es sobre 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?
bash
shell-script
exit
exit-status
Reventado
fuente
fuente
exit 0
, saldrá con el código de salida de 0 independientemente de lo que ocurra dentro del script.exit 0
, saldrá con el código 0 solo si se ejecutó esa última instrucción. El único impacto deexit 0
al final del script es devolver 0 en lugar del estado de la instrucción anterior.Respuestas:
El comando incorporado
exit
sale del shell (de la referencia de Bash ):La ejecución hasta el final del archivo también sale, devolviendo el código de retorno del último comando, por lo que sí, una final
exit 0
hará que el script salga con un estado exitoso independientemente del estado de salida de los comandos anteriores. (Es decir, suponiendo que el script llegue al finalexit
). Al final de un script, también puede usartrue
o:
para obtener un código de salida de cero.Por supuesto, más a menudo lo usarías
exit
desde adentroif
para terminar el script en el medio.Deben imprimir un 1 (
$?
contiene el código de salida devuelto por el comando anterior):Si bien esto debería imprimir un 0:
No estoy seguro de si el concepto del script "falla" cuando se ejecuta un
exit
sentido, ya que es posible que algunos comandos ejecutados por el script fallen, pero el script en sí mismo 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 códigos superiores a 127 para indicar un proceso terminado por una señal, pero se pueden devolver de la manera habitual. La
wait
llamada al sistema en realidad devuelve un valor más amplio, y el resto contiene bits de estado establecidos por el sistema operativo.fuente
$?
en 128 + signum en ese caso. ¿Ver el código de salida predeterminado cuando finaliza el proceso? para detalles.exit 0
solo devolverá 0, si se ejecuta la salida. (podría salir por una ruta diferente).0 significa éxito, los enteros positivos significan fracaso. Hay 255 códigos de error diferentes, pero los valores 126 y superiores están reservados para indicar que un programa no pudo iniciarse (126 o 127) o fue eliminado por una señal (129 y superior). ¿Ver el código de salida predeterminado cuando finaliza el proceso? y ¿Qué valores de retorno / salida puedo usar en funciones / scripts bash? para más información.
El estado de salida de un script de shell es el estado de salida del último comando que ejecutó el script. Así por ejemplo
devuelve el estado de salida de
somecommand
, mientras quedevuelve 0 independientemente de lo que
somecommand
devuelve. Este segundo guión también podría escribirsePoner
exit 0
al final de un script no necesariamente hace que devuelva 0. Esto solo hace que devuelva 0 cuando se alcanza el final del script. Por ejemplo, el siguiente script siempre devuelve 3:El siguiente script también siempre devuelve un código de error, además de mostrar un mensaje sobre un error de sintaxis:
El siguiente script devuelve 1 o 0 según su primer argumento:
El siguiente script devuelve el estado de
somecommand
, ya queset -e
hace que el script salga sisomecommand
falla:fuente