Veamos otro ejemplo. Dados los siguientes dos comandos: el primero (ls) es un comando válido mientras que el segundo (ls -0) es un comando inválido porque contiene una opción ilegal -0.

Este es un comando válido:

$ ls
Applications Documents Library Music Public$ echo $?
0

Ahora veamos el comando inválido:

$ ls -0
ls: illegal option -- 0
usage: ls $ echo $?
1

El problema con el segundo script es que muestra cualquier mensaje de error en STDERR. Sin embargo, para nuestros scripts, queremos suprimir los mensajes de error. Por suerte hay un truco para hacer exactamente lo que queremos.

Volvamos a intentarlo con > /dev/null 2>&1:

$ ls -0 > /dev/null 2>&1
$ echo $?
1

Nota esta vez, que no vemos ningún mensaje de error. Para desglosar esto, estamos suprimiendo la salida de error (stderr) del comando ls -0, redirigiéndola a la salida estándar (stdout), escribiéndola en /dev/null y descartándola inmediatamente. El símbolo >& es un operador que copia la salida del primer descriptor de fichero (2) y la redirige a la salida del segundo descriptor de fichero (1).

Ahora veamos lo que representan los números de 2>&1 mirando esta tabla de Descriptores de Fichero.

Podemos comprobarlo dando salida a un fichero normal en lugar de /dev/null.

$ ls -0 > /tmp/devnull 2>&1
$ echo $?
1$ cat /tmp/devnull
ls: illegal option -- 0
usage: ls

Deja una respuesta

Tu dirección de correo electrónico no será publicada.