Estou executando um programa de terceiros (script de shell que inicia um programa em Java). Quando eu redirecionar seu stdout para qualquer lugar, para um arquivo ou para qualquer outro programa como o gato, ele não gosta e lança erro. Quando eu corro interativamente, funciona bem. Para que minha automação funcione, é necessário ler stdout (isto é, redirecionar) e fornecer stdin de acordo. O programa solicita stdin ('Enter') três vezes. Estranhamente, sempre que redirecionar stdout, o problema sempre acontece ao exibir o segundo prompt. O primeiro é bom.
Modo interativo
> third-party-program.sh some-param
Some_output_1
Some_output_2
Press enter to continue <I hit Enter>
Some_output_3
Some_output_4
Some_output_5
Please provide a backup location. : [Default: /home/myuser/backup] : <I hit Enter>
Some_output_6
Press enter to continue <I hit Enter>
Some_output_7
Some_output_8
:
Done
Redirecionando stdout para gato
> third-party-program.sh some-param | cat
Some_output_1
Some_output_2
Press enter to continue <I hit Enter>
Some_output_3
Some_output_4
Some_output_5
Error
Redirecionando para arquivo, rejeitando arquivo na segunda janela e pressionando enter (três vezes idealmente) na primeira janela
Primeira janela
> third-party-program.sh some-param 1>/tmp/third-party-program.stdout
<I hit Enter>
Segunda janela
> tail -f /tmp/third-party-program.stdout
Some_output_1
Some_output_2
Some_output_3
Some_output_4
Some_output_5
Error
Meta: para poder farejar o stdout. Detectar quando Some_output_2
aparecer na stdout e enviar < Digite > (isto é, nova linha) para stdin. Da mesma forma, detecte quando Some_output_5
e Some_output_6
aparecem na stdout e enviam nova linha para stdin. Por causa da questão acima, Some_output_5
nunca aparece na stdout b'se os erros do programa. Minha lógica de programa para enviar nova linha para stdin está funcionando bem. Eu estou aproveitando mkfifo lá.
Alguma sugestão sobre o que poderia estar causando esse erro no redirecionamento? Como posso contornar este problema e ser capaz de farejar no stdout?
Tags stdout