2010-02-04 4 views
5

Ich habe ein Bat-Skript, das an einer Stelle leitet das stderr eines Prozesses an die stdout, und schreibt es dann in eine Datei. Ich benutzte es, wie dies zu tun:Fledermaus Redirecting stderr zu stdout hat seltsames Verhalten

process.exe 2>&1 > file.txt 

Dies ist jedoch nicht die stderr auf die Datei nicht umleiten (aus Gründen, kann ich nicht verstehen). Wenn ich die Linie änderte zu:

process.exe > file.txt 2>&1 

Die ganze Sache funktionierte. Sind diese beiden nicht gleichwertig?

Antwort

8

Das erste Beispiel im Wesentlichen tut:

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

So stderr noch an den ursprünglichen stdout zeigt. Ihr zweites Beispiel tut:

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

Also, beide stderr und stdout jetzt file.txt verweisen. Es ist ärgerlich subtil.

2

Die Umleitung 2>&1 funktioniert am Ende der Befehlszeile. Es funktioniert nicht als der erste Umleitungsparameter, die Umleitung erfordert einen Dateinamen und die 2>&1 am Ende. Sie versuchen effektiv, stderr umzuleiten, aber es gibt keinen Platzhalter, um die stderr-Nachrichten zu speichern, daher ist es fehlgeschlagen. Die Verknüpfung dieser zu erinnern ist

 
executable > some_file 2>&1 

hoffe, das hilft, Mit freundlichen Grüßen, Tom.

1

By the way, aus Gründen ich nicht ganz verstehe, ein Think wie

process.exe > result.txt 2<&1 

scheint auch

zu arbeiten