У меня есть bat сценарий, который однажды перенаправляет stderr процесса к stdout и затем пишет это в файл. Я раньше делал это как это:
process.exe 2>&1 > file.txt
Однако это не перенаправляет stderr в файл (по причинам, которые я не могу понять). Когда я изменил строку к:
process.exe > file.txt 2>&1
Все это работало. Разве эти два не эквивалентны?
В первом примере, по сути, так и есть:
stderr = stdout;
stdout = "file.txt";
Итак, stderr
все еще указывает на исходный stdout
. Во втором примере:
stdout = "file.txt";
stderr = stdout;
Итак, оба примера stderr
и stdout
теперь ссылаются на файл file.txt
. Это раздражающе тонко.
Переадресация 2>&1
работает в конце командной строки. Он не будет работать в качестве первого параметра перенаправления, для перенаправления требуется имя файла и 2>&1
в конце. Вы фактически пытаетесь перенаправить stderr, но нет плейсхолдера для хранения сообщений stderr, поэтому он не сработал. Ярлык для запоминания этого -
executable > some_file 2>&1
Надеюсь, это поможет, С наилучшими пожеланиями, Том.