Controlando o terminal enquanto no meio de um pipe [duplicado]

1

Digamos que eu tenha 3 comandos vinculados por meio de pipes:

A | B | C

Gostaria que B emitisse mensagens de erro para stderr e algum progresso para o terminal. Se stderr é o mesmo que o terminal, então é fácil: basta enviar as informações de progresso para stderr. Mas e se stderr for redirecionado?

A | B 2>/tmp/file | C

Então, ainda quero que as informações de progresso sejam enviadas ao terminal, enquanto as mensagens de erro vão para o arquivo.

Posso agora de alguma forma identificar o terminal em que o stderr teria terminado se não tivesse sido redirecionado?

Minha ideia inicial seria encontrar o tty usando tty e depois abrir e escrever para ele. No entanto, se eu chamar tty de dentro de B tty diz: not a tty , o que acredito ser devido ao tubo entre A e B.

Eu gostaria de fazer isso com o Perl.

    
por Ole Tange 13.12.2014 / 12:24

1 resposta

1

Específico do Linux:

echo |perl -e '$p=getppid; 'echo foo > /proc/$p/fd/2''

Se você redirecionar aqui, o stderr 'foo' ainda está impresso no terminal:

echo |perl -e '$p=getppid; 'echo foo > /proc/$p/fd/2'' 2>/dev/null
    
por 13.12.2014 / 13:22