У меня есть команда: mywritercmd -f /tmp/test 2>&1 > log.txt
Я запускаю в терминале bash, команда возвращаетerror: could not open output file "/tmp/test": Permission denied
Тем не менее, это сообщение об ошибке не написано вжурнал.txtфайл, он остается пустым...
Почему?
Я бы предположил, что это сообщение должно попасть в stderr, а затем в файл, но почему-то этого не происходит.
решение1
Разница обусловлена порядком. Командная строка оценивается слева направо. Когда она достигает 2>&1
, инструкция заключается в том, чтобы доставить stderr туда, куда направляется stdout. На этом этапе часть > log.txt
еще не оценена. В результате stderr остается по умолчанию, то есть выводить на терминал.
mywritercmd -f /tmp/test > log.txt 2>&1
приведет к желаемому поведению и запишет сообщение об ошибке в файл log.txt.