2010-02-04 15 views
5

Mam skrypt bat, który w pewnym momencie przekierowuje stderr procesu na standardowe wyjście, a następnie zapisuje go do pliku. Zrobiłem to tak:Nietoperz przekierowujący stderr na stdout ma dziwne zachowanie

process.exe 2>&1 > file.txt 

Jednak to nie przekierowuje stderr do pliku (z przyczyn, których nie rozumiem). Kiedy zmodyfikowałem linię na:

process.exe > file.txt 2>&1 

Cała sprawa zadziałała. Czy nie są to dwa odpowiedniki?

Odpowiedz

8

Pierwszy przykład zasadniczo robi:

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

Więc stderr wciąż wskazując na oryginalnym stdout. Twój drugi przykład robi:

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

więc zarówno stderr i stdout teraz odwołać file.txt. Jest denerwująco subtelny.

2

Przekierowanie 2>&1 działa na końcu wiersza polecenia. Nie będzie działać jako pierwszy parametr przekierowania, przekierowanie wymaga nazwy pliku, a na końcu - nazwy 2>&1. Próbujesz skutecznie przekierować stderr, ale nie ma miejsca na przechowywanie wiadomości stderr, więc nie udało się. Skrót do pamiętając to

 
executable > some_file 2>&1 

Nadzieja to pomaga, poważaniem Toma.

1

Nawiasem mówiąc, ze względu na nie w pełni rozumieją, myśle jak

process.exe > result.txt 2<&1 

również wydaje się działać