Я не понимаю, в каком порядке лучше всего захватить оба STDERR
и STDOUT
в тот же файл, используя tee
. Я знаю, что если я хочу передать файл по конвейеру, я должен сопоставить дескриптор файла после перенаправления, т.е.
find . >/tmp/output.txt 2>&1
Это инструктирует оболочку отправить STDOUT
к /tmp/output.txt
а затем отправить STDERR
к STDOUT
(который сейчас отправляется /tmp/output.txt
).
Попытка выполнить 2>&1
перед перенаправлением файл не даст желаемого эффекта.
Однако, когда я хочу использовать трубку tee
должно быть:
find . |tee /tmp/output.txt 2>&1 # or
find . 2>&1 |tee /tmp/output.txt # ?
Последний; он проверяет, что STDOUT и STDERR исходной команды идут в один и тот же fd, а затем передает их вместе в tee. В первом случае это STDERR команды tee, к которой вы присоединитесь с ее STDOUT.