Redireciona dois stdout para um stdin no bash do Linux

0

Eu tenho um programa em C que lê stdin e faz algumas operações. Fui solicitado a inserir informações periodicamente (a cada 20 s) e deixar a interação do usuário igual ao fazer alguns testes.

Isso é possível sem modificar o programa C? Eu já fiz um script de shell que ecoa a informação periodicamente (para o seu stdout), então a idéia é conectar este shell e o stdin normal a apenas um stdin (um tee inverso).

Eu tentei (./periodic.sh; cat) > ./myprogram, que não funciona porque está esperando que o script termine (e o mesmo ocorre ao contrário).

    
por markmb 01.04.2014 / 08:43

2 respostas

1

Para conseguir isso, você pode usar um "soquete" no meio. Você configuraria um arquivo de soquete (por exemplo, /tmp/program.socket e, em seguida, adaptaria seu programa para ler em vez de stdin.

Então você pode ter quantos programas forem necessários para escrever para o soquete.

    
por 01.04.2014 / 10:20
1

Seu script não está funcionando, não porque "./myprogram" esteja esperando que seu script termine, mas porque "./myprogram" está aguardando que o "gato" indefinido termine o início em sua subshell "(.. .) ".

Mesmo que sua pergunta seja muito vaga, acredito que você precise aprender a usar cachimbos.

mkfifo mypipe
while true; do
    ./periodic.sh > mypipe &
    ./myprogram < mypipe
done

Este código irá sempre aguardar sua entrada para "./periodic.sh", uma vez que você forneça isso, ele será passado para o pipe "mypipe" (em segundo plano), então "./myprogram" irá processá-lo saída.

Espero que seja isso que você está procurando. Como eu disse antes, sua pergunta é um pouco vaga.

Divirta-se.

    
por 01.04.2014 / 21:33