usuarios usr useradd the sirve sbin restricting que para nologin false deny bash shell diff exit-code

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 y 2 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.