Não estou claro qual é a melhor ordem para capturar ambos STDERR
e STDOUT
para o mesmo arquivo usando tee
. Eu sei que se eu quiser canalizar para um arquivo, tenho que mapear o tratamento de arquivos após o redirecionamento, ou seja,
find . >/tmp/output.txt 2>&1
Isso instrui o shell para enviar STDOUT
para /tmp/output.txt
e, em seguida, enviar STDERR
para STDOUT
(que agora está enviando a /tmp/output.txt
).
Tentar executar o 2>&1
antes de redirecionar o arquivo não terá o efeito desejado.
No entanto, quando eu quero canalizar usando tee
deveria ser:
find . |tee /tmp/output.txt 2>&1 # or
find . 2>&1 |tee /tmp/output.txt # ?
|&
for usado, o erro padrão do comando1 será conectado à entrada padrão do comando2 através do canal; é uma abreviação de2>&1 |
. Esse redirecionamento implícito do erro padrão é realizado após qualquer redirecionamento especificado pelo comando".stderr
estdout
para entender esse problema. Os operadores de redirecionamento>
e tee|
diferem ao tentar capturar os dois fluxos de saída. Para redirecionamento eu tive que./testapp > /tmp/out.log 2>&1
. Considerando que para tee eu tinha que./testapp 2>&1 | tee /tmp/out.log
.|
é normalmente chamado de operador de tubo.tee
refere-se apenas ao programa específico que está sendo chamado na extremidade do canal.