2010-02-04 8 views
5

Tengo un script bat que en un punto redirige el stderr de un proceso al stdout, y luego lo escribe en un archivo. Solía ​​hacerlo de esta manera:Bat redireccionando stderr a stdout tiene un comportamiento extraño

process.exe 2>&1 > file.txt 

Sin embargo, esto no redirige stderr al archivo (por razones que no puedo entender). Cuando modifiqué la línea a:

process.exe > file.txt 2>&1 

Todo funcionó. ¿No son estos dos equivalentes?

Respuesta

8

El primer ejemplo lo hace esencialmente:

stderr = stdout; 
stdout = "file.txt"; 

Así, stderr todavía está apuntando a la original, stdout. Su segundo ejemplo hace:

stdout = "file.txt"; 
stderr = stdout; 

Así, tanto stderr y stdout referencia ahora file.txt. Es molestamente sutil.

2

La redirección 2>&1 funciona al final de la línea de comando. No funcionará como el primer parámetro de redirección, la redirección requiere un nombre de archivo y 2>&1 al final. Estás tratando de redireccionar stderr de manera efectiva, pero no hay un marcador de posición para almacenar los mensajes de stderr, por lo que falló. El acceso directo a recordar esto es

 
executable > some_file 2>&1 

Espero que esto ayude, Saludos cordiales, Tom .

1

Por cierto, por razones que no entiendo por completo, un pensar como

process.exe > result.txt 2<&1 

también parece funcionar