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
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.
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
Tags tty shell io-redirection