Redirecionar entrada do código ou terminal para código ou terminal em execução?

3

Atualmente, estou usando um script de software que requer entrada contínua por meio do terminal. O script avalia os arquivos continuamente recebendo entrada de caminho e avaliando o arquivo no caminho.

O objetivo : é possível executar um script que requer entrada por meio da passagem de entrada de outro terminal ou script.

O software de avaliação carrega muitos dados antes de estar pronto para o processamento, é por isso que eu preferiria manter o software em execução e simplesmente transmitir informações de tempos em tempos. Em vez de iniciar o software e carregar todos os dados necessários (o que leva tempo).

Posso mencionar que tentei tty para encontrar:
$ /dev/pts/19
depois, através de outro terminal: $ <command> <myinput> > /dev/pts/19
onde o comando é substituído por 'echo / print'
No entanto, apenas imprime no outro terminal, não funciona como entrada para o software.

    
por Emir Husic 19.02.2018 / 09:50

1 resposta

2

Crie um pipe nomeado:

mkfifo pipe

Verifique se ele não será fechado (consulte esta resposta ):

exec 3<>pipe

Alimente seu script a partir do canal:

<pipe your_script.sh
# or if you want to see incoming data
<pipe tee >(your_script.sh)

Em seguida, em outro terminal, use echo , printf ou qualquer outra coisa:

echo "/some/path/or/another/input" > pipe

ou

cat large_input.txt > pipe

ou

script_that_generates_input.sh > pipe

Mas cuidado com a condição de corrida! Não alimente o tubo de duas ou mais fontes ao mesmo tempo; sempre espere o comando de alimentação atual sair antes de executar o próximo. Observe que, se uma fonte transmitir muitos dados, ela poderá ser mantida no meio do caminho, até que o lado de recebimento processe os dados. Coloque mbuffer (com argumentos que se ajustem ao seu caso de uso) antes de your_script.sh para criar um buffer que possa armazenar mais dados de entrada antes que qualquer comando de alimentação seja colocado em espera.

    
por 19.02.2018 / 10:50