Como você está usando o Linux, existe uma solução padrão para esse problema: um pipe nomeado. Um pipe nomeado é um arquivo no qual um processo grava e a partir do qual outro processo lê assim que os dados se tornam disponíveis. O sistema operacional cuida de acordar o processo de leitura e diz "há novidades para você". Também cuida de entregar ao processo de identificação a quantidade exata de dados que se tornou disponível, não mais, nem menos. Em outras palavras, pode haver 1 reserva ou 57 reservas, todas elas serão entregues corretamente sem que você tenha que contar para elas.
Você cria um pipe nomeado por meio do comando:
mkfifo my_pipe
Agora você usa o arquivo my_pipe como qualquer outro arquivo, pode escrever nele, ler a partir dele, redirecionar para ele, anexá-lo a ele:
echo "This is my name" > my_pipe
grep name my_pipe
cat my_pipe | while read; do ...; done
e assim por diante.