Eu tenho um programa que sai automaticamente após a leitura de um EOF em um determinado fluxo (no caso a seguir, stdin).
Agora eu quero criar um script de shell, que crie um pipe nomeado e conecte o stdin do programa a ele. Em seguida, o script grava no canal várias vezes usando echo
e cat
(e outras ferramentas que geram automaticamente um EOF quando saem). O problema que estou enfrentando é que, quando o primeiro echo
é concluído, ele envia um EOF ao canal e faz com que o programa saia. Se eu usar algo como tail -f
, não posso enviar um EOF quando pretendo sair do programa. Estou pesquisando uma solução equilibrada, mas sem sucesso.
Eu já descobri como impedir EOFs e como enviar um EOF manualmente, mas não posso combiná-los. Existe alguma dica?
#!/bin/sh
mkfifo P
program < P & : # Run in background
# < P tail -n +1 -f | program
echo some stuff > P # Prevent EOF?
cat more_stuff.txt > P # Prevent EOF?
send_eof > P # How can I do this?
# fg
exec 3>P
causa está pendurada no bash, por quê?