Puede haber, o no puede haber diferentes códigos de error dependiendo de la versión de diff que utilice. Si mal no recuerdo, el estándar BSD diff siempre devolvió un código de salida de 0, 1 o 2.
Sin embargo, la página de manual no está trazando todo lo que diff podría hacer, pero la documentación que puede usar para usar diff mando. En un script de shell, quiero saber si los archivos coinciden (exit = 0) o no coinciden (exit = 1). Sin embargo, en mi script de shell, 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 ]
echo "$file1 and $file2 differ"
else
echo "There was something wrong with the diff command"
fi
Imagínese si me dijeron que significaba el diff 2 mandato ha fallado, pero una versión más reciente del comando diff hizo una distinción entre un archivo no se puede leer (salida = 2) y un archivo que falta (salida = 3). Ahora bien, imagínese si lo hiciera 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 ]
echo "$file1 and $file2 differ"
else
echo "$file1 and $file2 are the same file"
fi
En el código anterior, he comprobado el código de error de 2 y 1, pero no 3 Entonces, en lugar de detectar un archivo perdido, supongo que los archivos coinciden.
La página de manual intenta asegurarse de que las futuras actualizaciones del sistema operativo no provoquen que la mayoría de las secuencias de comandos de shell fallen repentinamente. Es por eso que hubo un comando awk
y nawk
separado y un comando grep
y egrep
por separado.
* Actualizado según el comentario de @chus.
de acuerdo, he comprobado las fuentes, y los únicos códigos de salida son EXIT_SUCCESS, EXIT_FAILURE (ambos definidos en stdlib.h) y EXIT_TROUBLE , definido en src/diffutils-3.0/system.h –
La opción '--text' hace un lío de mi STDOUT si hay dos (grandes) archivos binarios diferentes. –
Estoy usando diffutils de GNU también, pero he citado la página de manual incorrecta. –