Pipe stderr para arquivar e exibir a tela sem redirecionar stderr para stdout

0

Em um script bash eu gostaria de executar um comando enquanto canaliza o stderr para um arquivo e para o terminal. No entanto, quero que o stderr permaneça no descritor de arquivo '2' para que eu possa analisá-lo a partir de um processo externo que esteja chamando este script bash.

Todas as soluções que vi até agora envolvem a troca de stdout com stderr e, em seguida, o tee'ing para outro arquivo, por exemplo :

find /var/log 3>&1 1>&2 2>&3 | foo.file

Se eu for chamar este script de outro, o stderr irá para stdout e stdout irá para stderr, o que não é bom para mim. Eu tentei trocá-los novamente assim:

find /var/log 3>&1 1>&2 2>&3 | foo.file 4>&1 1>&2 2>&4

mas isso não funciona.

    
por Eddy 25.09.2018 / 12:14

1 resposta

1

Descobri como fazer isso no final, seguindo os conselhos de esta página . Eu preciso redirecionar stderr para tee e redirecionar a saída de tee de volta para stderr.

find /var/log 2> >(tee foo.file >&2)
    
por 25.09.2018 / 12:30