O programa dá erro quando o stdout é redirecionado para qualquer lugar

0

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?

    
por hznut 07.12.2016 / 18:06

0 respostas

Tags