Parece que você precisa de pipes nomeados:
Basicamente, você cria um pipe nomeado, executa o processo que obtém entrada do pipe nomeado e, em seguida, passa o que quiser para o pipe nomeado para que ele seja processado pelo processo.
Por exemplo:
mkfifo /tmp/namedpipe
tail -f /tmp/namedpipe &
echo "BOO"> /tmp/namedpipe
echo "this" > /tmp/namedpipe
Isto irá ecoar (por cauda) para stdout tudo o que é enviado para o / tmp / namedpipe.
Eu uso tail em vez de cat, porque cat sairá do processo quando receber EOF.
UPD. Esclarecimento.
Para passar isso ao seu processo, você precisa fazer algo assim:
tail -f /tmp/namedpipe | yourprocess &
UP2. Então, no seu caso, a sequência seria assim:
mkfifo /tmp/namedpipe
--- este será o ponto de entrada através do qual você pode enviar dados para o seu processo.
tail -f /tmp/namedpipe | /usr/lib/w3m/w3mimgdisplay &
- isso criará o processo persistente que você deseja e, no futuro, fornecerá um feed a ele enviando pelo canal.
echo -e '0;1;0;0;0;0;0;0;0;0;file.png\n4;\n3;' > /tmp/namedpipe
Deve mostrar a imagem na tela.
A partir de agora, quaisquer outras coisas que você enviará para / tmp / namedpipe serão como novas linhas ecoadas no comando e também devem aparecer na tela.