2012-02-22 19 views
7

Me gustaría saber cuál es el & significa en la declaración:cuál es la diferencia entre el 2> 1>/dev/null y 2> & 1>/dev/null

2>&1 > /dev/null 

Su redireccionamiento stderr a stdout y luego a bit bucket, pero ¿cuál es & en él?

¿Puedo usarlo como:

2>1 >/dev/null 
+2

Claro, si desea generar stderr en un archivo llamado "1". – cHao

+1

Esto ayuda http://www.xaprb.com/blog/2006/06/06/what-does-devnull-21-mean/ – KK99

+0

@cHao: got ur point. – kailash19

Respuesta

7

El & significa descriptor de archivo. Así 2>&1 redirige stderr a stdout cualquier momento, apunta a, mientras que 2>1 redirige stderr en un archivo llamado 1

Además, las redirecciones suceda en orden. Entonces, si dices 2>&1 >/dev/null, redirige a stderr para que apunte a lo que stdout apunta actualmente (que probablemente sea un noop), luego redirige stdout a/dev/null. Probablemente desee >/dev/null 2>&1

+0

Entonces, y para decirle a FD. Pregunta en mi mente: ¿por qué no lo hemos usado en el caso de 2 (stderr)? ow shell sabe que 2 (sin &) es FD? – kailash19

+0

¿Qué quieres decir? La sintaxis es fd> file o fd> & fd independientemente de los números que esté usando para las ranuras "fd". – tripleee

+1

kailash19: Vuelve a leer la publicación anterior. Tenga en cuenta que '... mientras 2> 1 redirige stderr a un archivo llamado 1'. Así que pruébelo: 'printf" xxx \ n "2> 1; ls -l 1'. El archivo está allí (pero está vacío) y xxx apareció en su pantalla. Es legal y útil para redirigir la salida de stderr a un archivo, es decir 'myCmd 2>/tmp/myCmd.stderr.out.txt', ¿verdad? pero eso es diferente a la manipulación de lo que sucede con stdout '& 1', y stderr '& 2'. No es una sintaxis completamente intuitiva. Debido a que no tengo que usarlo muy a menudo, incluso un año> 10, todavía tengo que buscar esto si quiero hacer algo nuevo o diferente. Buena suerte a todos. – shellter

Cuestiones relacionadas