Dividamos la >> /dev/null 2>&1declaración en partes:
Parte 1: >> redirección de salida
Esto se utiliza para redirigir la salida del programa y agregar la salida al final del archivo. Más...
Parte 2: /dev/null archivo especial
Este es un archivo especial de pseudodispositivos .
El comando ls -l /dev/nullte dará detalles de este archivo:
crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null
¿Lo observaste crw? Lo que significa que es un archivo de pseudodispositivo que es de tipo de archivo de caracteres especiales que proporciona acceso en serie.
/dev/nullacepta y descarta todas las entradas; no produce salida (siempre devuelve una indicación de fin de archivo en una lectura). Referencia: Wikipedia
Parte 3: 2>&1 descriptor de archivo
Cada vez que ejecuta un programa, el sistema operativo siempre abre tres archivos, entrada estándar, salida estándar y error estándar, ya que sabemos que cada vez que se abre un archivo, el sistema operativo (desde el núcleo ) devuelve un entero no negativo llamado descriptor de archivo . El descriptor de archivo para estos archivos es 0, 1 y 2, respectivamente.
Entonces 2>&1simplemente dice redirigir el error estándar a la salida estándar.
& significa que lo que sigue es un descriptor de archivo, no un nombre de archivo.
En resumen, al usar este comando le está diciendo a su programa que no grite mientras se ejecuta.
¿Cuál es la importancia de usar 2>&1?
Si no desea producir ninguna salida, incluso en caso de algún error producido en el terminal. Para explicar más claramente, consideremos el siguiente ejemplo:
$ ls -l > /dev/null
Para el comando anterior, no se imprimió ninguna salida en el terminal, pero qué pasa si este comando produce un error:
$ ls -l file_doesnot_exists > /dev/null
ls: cannot access file_doesnot_exists: No such file or directory
A pesar de que estoy redirigiendo la salida /dev/null, se imprime en el terminal. Es porque no estamos redirigiendo la salida de error /dev/null, por lo que para redirigir también la salida de error, es necesario agregar 2>&1:
$ ls -l file_doesnot_exists > /dev/null 2>&1
>&- 2>&-.