Si ejecuto diff -q
dos archivos y son idénticos, el código de salida generado por echo $?
es 0
; si los archivos difieren, el código de salida es 1
. ¿Porqué es eso? ¿En qué sentido el primero es diff
un éxito y el segundo un fracaso?
Utilicé los términos "éxito" y "fracaso" basándose en mi lectura y comprensión limitada dehttp://mywiki.wooledge.org/BashGuide/TestsAndConditionals:
- Estado de salida
Cada comando genera un código de salida cada vez que finaliza.
Este código de salida lo utiliza cualquier aplicación que lo haya iniciado para evaluar
si todo salió bien. Este código de salida es como un valor de retorno de
funciones. Es un número entero entre 0 y 255 (inclusive). La convención
dicta que usemos 0 para denotar éxito y cualquier otro número para denotar
algún tipo de fracaso.El número específico es completamente específico de la aplicación.,
y se utiliza para dar pistas de qué salió mal exactamente.
Debería haber leído man diff
hasta el final donde queda clara la convención utilizada por los desarrolladores.
Respuesta1
De man diff
:
El estado de salida es 0 si las entradas son iguales, 1 si son diferentes, 2 si hay problema.
Admito libremente que esto podría no sercompletamente estándarpero los códigos de salida sonmás lo que llamarías "directrices" que reglas reales.
En este caso, desviarse del estándar le permite ejecutar diff
scripts fácilmente.
diff a b && echo "no difference" || echo "differences!"
Esto es similar a grep
que saldrá 0 si se encuentra algo y 1 si no se encuentra algo. No puedo explicar la orientación entre 0 y 1 para diff
. Supongo que optaron por resultados booleanos estándar C.
Realmente no importa. Es sólo un número arbitrario.
Respuesta2
man diff
Cuéntanos
ESTADO DE SALIDA
The following exit values shall be returned:
0 No differences were found.
1 Differences were found.
>1 An error occurred.
Llamar a los valores de salida "éxito" y "fracaso" es una opción autolimitada. Los programas tienen 8 bits completos para el estado de salida, valores de 0 a 255.