¿Qué significa 2> / dev / null?

Respuestas:

348

El operador> redirige la salida generalmente a un archivo, pero puede ser a un dispositivo. También puede usar >> para agregar.

Si no especifica un número, se supone la secuencia de salida estándar, pero también puede redirigir errores

> fileredirige stdout a archivo
1> fileredirige stdout a archivo
2> fileredirige stderr a archivo
&> fileredirige stdout y stderr a archivo

/dev/nulles el dispositivo nulo, toma cualquier entrada que desee y la tira. Se puede usar para suprimir cualquier salida.

Warren Hill
fuente
66
¿hay alguna diferencia entre > /dev/null 2>&1y&> /dev/null
Alexander Mills
13
En la práctica de hoy, no creo que haya 2>&1una sintaxis anterior, por &>lo que no habría funcionado hace años, pero ambas son equivalentes.
Warren Hill
28

En resumen, redirige stderr(fd 2) al agujero negro (descarta la salida del comando).

Algunos casos de uso más comunes para la redirección:

command > /dev/null 2>&1 &

Ejecutar commanden segundo plano, descartar stdoutystderr

command >> /path/to/log 2>&1 &

Ejecute commandy agregue stdout y stderr a un archivo de registro.

En Bash 4+, una forma más corta (pero menos legible) es funcional

command &>> /path/to/log
Terry Wang
fuente
3
¿Hay una buena razón para usar en > /dev/null 2>&1lugar de &> /dev/null?
Craig McQueen
77
@CraigMcQueen &>es nuevo en Bash 4, el primero es la forma tradicional, estoy muy acostumbrado (fácil de recordar).
Terry Wang
@CraigMcQueen según un comentario sobre esta respuesta , &> /dev/nullpuede no funcionar en algunos shells pero> / dev / null 2> & 1 funcionará en todos los shells compatibles con POSIX.
Stack Underflow
3
¿Por qué es 2> y 1 y no 2 y 1> ??
marienbad
1
@marienbad que en realidad es una pregunta que vale la pena publicar :-) La sintaxis es fn>target, donde fnhay un número de archivo (0-2 típicamente, algunos programas definen más números) y targetgeneralmente es un nombre de archivo, pero aquí hay otro número de archivo, con el prefijo &cual es el sintaxis para "Quiero un número de archivo en lugar de un nombre de archivo".
Toolforger
9

/dev/nullse trata como un agujero negro en Linux / Unix, por lo que puede poner cualquier cosa en esto, pero no podrá recuperarlo /dev/null.

Además, 2>significa que está redirigiendo (es decir >) el stderr (es decir 2) hacia el agujero negro (es decir /dev/null)

Tu comando es:

grep -i 'abc' content 2>/dev/null 

No intente terminar con otra barra diagonal como esta - 2>/dev/null/(no es un directorio).

Indrajeet Gour
fuente
2

El contenido grep -i 'abc' generará una salida que se mostrará en su consola, incluidos los errores.

Si especifica 2>/dev/null, filtrará los errores para que no se envíen a su consola.

Más detalladamente: 2 representa el descriptor de error, que es donde se escriben los errores. Por defecto se imprimen en la consola.

\> redirige la salida al lugar especificado, en este caso /dev/null

/dev/null es el dispositivo estándar de Linux donde envía la salida que desea ignorar.

Mauro Zallocco
fuente
Conciso y sobre el tema. Buena respuesta.
Sergiy Kolodyazhnyy