Назад | Перейти на главную страницу

Захват STDERR и STDOUT в файл с помощью tee

Я не понимаю, в каком порядке лучше всего захватить оба 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.