Мне неясно, какой лучший порядок для записи обоих 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 # ?
|&
используется, стандартная ошибка command1 связана со стандартным вводом command2 через канал; это сокращение для2>&1 |
. Это неявное перенаправление стандартной ошибки выполняется после любых перенаправлений, указанных командой».stderr
иstdout
для понимания этой проблемы. Операторы перенаправления>
и tee|
отличаются при попытке захвата обоих выходных потоков. Для перенаправления мне пришлось./testapp > /tmp/out.log 2>&1
. Тогда как для тройника мне пришлось./testapp 2>&1 | tee /tmp/out.log
.|
обычно упоминается как оператор канала.tee
относится только к конкретной программе, которая вызывается на дальнем конце канала.