Considere o seguinte exemplo:
exec 10>&2 # duplicate STDERR to fd 10
{ echo ok; inexistantcommand; } > /tmp/both 2>&1 10>/tmp/err
exec 10>&- # close fd 10
Espero que /tmp/err tenha erro, mas está em branco:
$ cat /tmp/both
ok
-bash: inixistantcommand: command not found
$ cat /tmp/err
$
O que estou fazendo de errado?
EDITAR :
Testado:
{ echo ok; qsdfghjk; } &> >(tee /tmp/both) 2>/tmp/err
mas /tmp/both tem apenasSTDOUT
Isso parece ser sobre duplicar dados de um fluxo em vez de duplicar descritores de arquivo. Um fluxo de dados é duplicado por
tee
.Isso gravaria a
ok
string e a mensagem de erro emboth.log
, e também gravaria a mensagem de erro emerr.log
.A mensagem de erro é duplicada por
tee
, que a lê de seu fluxo de entrada padrão, proveniente do fluxo de erro redirecionado do comando composto. Otee
utilitário grava todas as suas entradas nos arquivos fornecidos e no fluxo de saída padrão. A saída padrão do comando composto e oftee
é canalizada paracat
, que os grava emboth.txt
.