Бат, перенаправляющий stderr на stdout, ведет себя странно - PullRequest
5 голосов
/ 04 февраля 2010

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

process.exe 2>&1 > file.txt

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

process.exe > file.txt 2>&1 

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

Ответы [ 3 ]

8 голосов
/ 04 февраля 2010

Первый пример по существу делает:

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

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

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

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

2 голосов
/ 04 февраля 2010

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

executable  > some_file 2>&1

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

1 голос
/ 15 июня 2012

Кстати, по причинам, которые я не совсем понимаю, думаю, как

process.exe > result.txt 2<&1 

тоже вроде работает

...