¿Qué es un código de salida
Cada script, comando o binario sale con un código de retorno. Puede ver este valor en la variable especial $? . Los códigos de retorno son numéricos y están limitados a estar entre 0 y 255 porque se usa un número entero de 8 bits sin signo. Si usa un valor de -1, devolverá 255. Cada ejecución termina con un código de salida, ya sea exitosa o no, con un mensaje de error o silenciosamente. Por ejemplo:
$ date ; echo $? Sat Jan 18 08:06:07 IST 2020 0
Como puede ver, el código de salida es 0 porque el comando se ejecutó sin problemas. Ahora, probemos esto:
$ wrngcmd ; echo $? -bash: wrngcmd: command not found 127
Es un comando que no se encuentra porque acabamos de escribir un montón de caracteres sin sentido.
Códigos de salida Bash reservados
Tan similar al código de salida "0" que denota el éxito del comando, bash tiene algunos códigos de salida reservados para diferentes situaciones. Entonces, idealmente, si está usando el comando de salida en un script y necesita especificar un código de salida, no use estos códigos de salida reservados, ya que pueden crear resultados contradictorios.
Número de código de salida | Significado | Ejemplo | Comentarios |
---|---|---|---|
1 | Catchall para errores generales | sea "var1 =1/0" | Errores diversos, como "dividir por cero" y otras operaciones no permitidas |
2 | Uso indebido de las funciones internas de shell | función_vacía() {} | Palabra clave o comando faltante |
126 | El comando invocado no puede ejecutarse | /dev/null | Problema de permisos o el comando no es un ejecutable |
127 | “comando no encontrado” | comando_ilegal | Posible problema con $PATH o un error tipográfico |
128 | Argumento inválido para salir | salir 3.14159 | exit solo acepta argumentos enteros en el rango de 0 a 255 (consulte la primera nota al pie) |
128 +n | Señal de error fatal "n" | matar -9 $PPID del script | $? devuelve 137 (128 + 9) |
130 | Script terminado por Control-C | Ctrl-C | Control-C es señal de error fatal 2, (130 =128 + 2, ver arriba) |
255* | Estado de salida fuera de rango | salir -1 | exit toma solo argumentos enteros en el rango de 0 a 255 |
Entendamos el código de salida “128 +n” con un ejemplo. Ejecute el ciclo interminable como se muestra a continuación:
#!/bin/bash while true; do echo ${$} done
Si ejecuta este script, imprimirá el mismo PID indefinidamente hasta que lo elimine o haga "CTRL + C". Intente hacer "CTRL+C" y vea cuál es el código de salida.
# sh test.sh .... 2582 2582 2582 2582 2582 2582 ^C geeklab$ echo $? 130
Como puede ver, el código de salida es "128+2", es decir, 130. De manera similar, si eliminamos el script usando "kill -9", el código de salida debería ser "128+9", es decir, 137. Veamos un ejemplo de eso también:
# sh test.sh .... 2582 2582 2582 ...
# kill -9 [pid_of_script]
.... 2602 2602 Killed: 9 geeklab$ echo $? 137