bash - usr - useradd sbin nologin
¿Cuáles son los valores de salida de error para diff? (3)
En la página de manual de diff
he encontrado estos valores de salida:
0 No differences were found.
1 Differences were found.
>1 An error occurred.
¿Hay diferentes valores de salida por encima de 1 para diferentes errores?
Depende de su comando diff
. Mine (GNU diffutils 3.0) dice:
Un estado de salida de
0
significa que no se encontraron diferencias,1
significa que se encontraron algunas diferencias y2
significa problemas. Normalmente, los archivos binarios diferentes cuentan como problemas, pero esto puede modificarse utilizando la opción-a
o--text
, o la opción-q
o--brief
.
En mi caso, diff devolvió 127, lo buscó y lo encontró en tldp.org "Códigos de salida con significados especiales"
127 "comando no encontrado" illegal_command Posible problema con $ PATH o un error tipográfico.
Usé un camino incorrecto para diferenciar. :)
Fuente: tldp.org/LDP/abs/html/exitcodes.html
Puede que haya, o puede que no haya diferentes códigos de error, dependiendo de la versión de diff que use. Si recuerdo correctamente, el estándar BSD dif siempre devolvió un código de salida de 0, 1 o 2.
Sin embargo, la página de manual no describe todo lo que puede hacer diff, sino la documentación que puede usar para usar el comando diff. En un script de shell, quiero saber si los archivos coinciden (exit = 0) o no coinciden (exit = 1). Sin embargo, en mi shell script, también quiero saber que el comando diff no funcionó.
diff $file1 file2 > /dev/null 2>&1
error=$?
if [ $error -eq 0 ]
then
echo "$file1 and $file2 are the same file"
elif [ $error -eq 1 ]
then
echo "$file1 and $file2 differ"
else
echo "There was something wrong with the diff command"
fi
Imagínese si me dijeran que 2 significa que el comando diff ha fallado, pero una versión más reciente del comando diff hizo una distinción entre un archivo que no puede leer (exit = 2) y un archivo faltante (exit = 3). Ahora, imagine que hice lo siguiente en una versión anterior del comando diff, pero $file2
no existía:
diff $file1 file2 > /dev/null 2>&1
error=$?
if [ $error -eq 2 ]
then
echo "There was something wrong with the diff command"
elif [ $error -eq 1 ]
then
echo "$file1 and $file2 differ"
else
echo "$file1 and $file2 are the same file"
fi
En el código anterior, verifiqué el código de error de 2 y 1, pero no 3. Entonces, en lugar de detectar un archivo faltante, asumo que los archivos coinciden.
La página de manual está tratando de asegurarse de que las futuras actualizaciones del sistema operativo no hagan que la mayoría de sus scripts de shell falle repentinamente. Es por eso que hubo un comando awk
y nawk
separado y un grep
y egrep
separado.
* Actualizado según comentario por @chus.