¿Hay alguna manera de hacer lo que se indica en el título de los comandos del terminal, o tendré que buscar en los códigos?
command
documentation
exit
preciso
fuente
fuente
Los códigos de salida indican una condición de falla al finalizar un programa y caen entre 0 y 255. El shell y sus componentes incorporados pueden usar especialmente los valores superiores a 125 para indicar modos de falla específicos, por lo que la lista de códigos puede variar entre shells y sistemas operativos (por ejemplo, Bash usa el valor 128 + N como el estado de salida). Ver: Bash - 3.7.5 Estado de salida o
man bash
.En general, un estado de salida cero indica que un comando tuvo éxito , un estado de salida distinto de cero indica un error .
Para verificar qué código de error devuelve el comando, puede imprimir
$?
para el último código de salida o${PIPESTATUS[@]}
que proporciona una lista de valores de estado de salida de la canalización (en Bash) después de que sale un script de shell.No hay una lista completa de todos los códigos de salida que se pueden encontrar, sin embargo, se ha intentado sistematizar los números de estado de salida en la fuente del núcleo, pero esto está destinado principalmente a los programadores de C / C ++ y un estándar similar para las secuencias de comandos podría ser apropiado.
Puede encontrar alguna lista de sysexits en Linux y BSD / OS X con códigos de salida preferibles para programas (64-78) en
/usr/include/sysexits.h
(o:man sysexits
en BSD):La lista anterior asigna códigos de salida previamente no utilizados de 64-78. El rango de códigos de salida no asignados se restringirá aún más en el futuro.
Sin embargo, los valores anteriores se usan principalmente en sendmail y casi nadie los usa, por lo que no son nada remotamente cercanos a un estándar (como lo señaló @Gilles ).
En shell, el estado de salida es el siguiente (basado en Bash):
1
-125
- El comando no se completó correctamente. Consulte la página del comando man para ver el significado del estado, algunos ejemplos a continuación:1
- Catchall para errores generalesEjemplo:
2
- Uso indebido de los componentes integrados de shell (según la documentación de Bash)Ejemplo:
6
- No existe tal dispositivo o direcciónEjemplo:
124
- el tiempo de espera del comando125
- Si un comando en sí falla, vea: coreutils126
- si se encuentra el comando pero no se puede invocar (por ejemplo, no es ejecutable)Ejemplo:
127
- si no se puede encontrar un comando, el proceso hijo creado para ejecutarlo devuelve ese estadoEjemplo:
128
- Argumento no válido paraexit
Ejemplo:
128
-254
- señal de error fatal "n" - el comando murió debido a la recepción de una señal. El código de señal se agrega a 128 (128 + SEÑAL) para obtener el estado (Linux:,man 7 signal
BSD:)man signal
, algunos ejemplos a continuación:130
- comando terminado debido a que se presionó Ctrl-C, 130-128 = 2 (SIGINT)Ejemplo:
137
- si se envía laKILL(9)
señal al comando (128 + 9), el estado de salida del comando de lo contrario141
-SIGPIPE
- escriba en una tubería sin lectorEjemplo:
143
- comando terminado por el código de señal 15 (128 + 15 = 143)Ejemplo:
255
* - estado de salida fuera de rango.Ejemplo:
Tenga en cuenta que los valores de salida fuera de rango pueden generar códigos de salida inesperados (por ejemplo, la salida 3809 proporciona un código de salida de 225, 3809% 256 = 225).
Ver:
fuente
errno
los valores son utilizados por las API del sistema, no se usan como estados de salida (ni siquiera están en el rango correcto) y son irrelevantes para las secuencias de comandos de shell. Los valores de Sysexits son de sendmail y son utilizados por prácticamente nadie más, no son nada remotamente cercanos a un estándar.Tendrá que buscar en el código / documentación. Sin embargo, lo que más se acerca a una "estandarización" es errno.h
fuente
errno.h
es irrelevante cuando se trata de códigos de salida, solo mensajes de error.sysexits.h
. Sin embargo, algunos programas devuelvenerrno
s, y realmente creo que devolvererrno
s tiene más sentido. Loserrno
s no manejados se propagan hacia arriba, como excepciones, (laserrno
estancias, las funciones regresan, por ejemplo,-1
o0|NULL
). Dado que los programas son solo funciones, aunque las funciones se ejecutan en un espacio de direcciones separado, tiene sentido que un programa desee continuar laerrno
propagación a través del límite del proceso."($numeric_code|$bsd_decoded|$errno_plus_one_decoded)"
.Hasta donde sé, solo hay dos valores estándar, más o menos, ambos definidos
stdlib.h
para usar con exit ():Y el único valor estándar de facto, es decir, que tiene el mismo significado para todos los programas en el mundo, es 0 (cero) que significa ÉXITO.
Los diferentes programas introducen diferentes listas de códigos de "falla" devueltos para distinguir o enfatizar diferentes errores (diferentes tipos o severidad). Algunos programas incluso usan el valor devuelto para informar el número entero de errores de tiempo de ejecución descubiertos (por ejemplo, el número de pruebas unitarias fallidas en la demanda).
No recomendaría introducir ningún tipo de "nuevo estándar" que extienda el
stdlib.h
fuente