У летучей мыши, перенаправляющей stderr к stdout, есть странное поведение

У меня есть bat сценарий, который однажды перенаправляет stderr процесса к stdout и затем пишет это в файл. Я раньше делал это как это:

process.exe 2>&1 > file.txt

Однако это не перенаправляет stderr в файл (по причинам, которые я не могу понять). Когда я изменил строку к:

process.exe > file.txt 2>&1 

Все это работало. Разве эти два не эквивалентны?

5
задан Geo 4 February 2010 в 08:20
поделиться

2 ответа

В первом примере, по сути, так и есть:

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

Итак, stderr все еще указывает на исходный stdout. Во втором примере:

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

Итак, оба примера stderr и stdout теперь ссылаются на файл file.txt. Это раздражающе тонко.

8
ответ дан 13 December 2019 в 19:27
поделиться

Переадресация 2>&1 работает в конце командной строки. Он не будет работать в качестве первого параметра перенаправления, для перенаправления требуется имя файла и 2>&1 в конце. Вы фактически пытаетесь перенаправить stderr, но нет плейсхолдера для хранения сообщений stderr, поэтому он не сработал. Ярлык для запоминания этого -

executable  > some_file 2>&1

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

2
ответ дан 13 December 2019 в 19:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: