¿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.


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

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).


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.


Conciso y sobre el tema. Buena respuesta.
— Sergiy Kolodyazhnyy
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.