Use um canal nomeado . A título ilustrativo:
mkfifo fifo
echo -e "hello world\nnext line\nline 3" > fifo
O -e
diz ao echo para interpretar corretamente o escape de nova linha ( \n
). Isso irá bloquear, ou seja, seu shell irá travar até que algo leia os dados do pipe.
Abra outro shell em algum lugar e no mesmo diretório:
cat fifo
Você vai ler o eco, que liberará o outro shell. Embora o pipe exista como um nó de arquivo no disco, os dados que passam por ele não o fazem; tudo acontece na memória. Você pode fazer o background ( &
) do eco.
O pipe tem um buffer de 64k (no linux) e, como um soquete, bloqueará o gravador quando estiver cheio, então você não perderá dados contanto que não mate prematuramente o gravador.