É impossível fazer a leitura de um pipe iniciar um processo em um sistema de arquivos normal. Mas existem outros métodos que devem fazer o que você precisa.
Você pode executar o programa de geração de conteúdo em um loop. Cada vez que o FIFO é aberto para escrita, isso irá bloquear até que um leitor apareça.
while true; do
generate-content >fifo
done
Outra abordagem é criar um sistema de arquivos FUSE que gere o conteúdo que você quiser - os dados retornados ao leitor são gerados pelo driver do sistema de arquivos, que é um programa comum, para que você possa fazer o que quiser. Construir um driver de sistema de arquivos FUSE é muito trabalhoso, então, a menos que você encontre um que já faça exatamente o que você precisa disso é provavelmente um exagero. Alguns sistemas de arquivos possíveis que podem ajudá-lo são:
- ScriptFS - a julgar pela descrição, isso faz exatamente o que você precisa: “replica um sistema de arquivos local, mas substitui todos os arquivos detectados como 'scripts' pelo resultado de sua execução ”. Eu nunca usei isso.
- HTTPFS - a leitura do arquivo aciona um download da web; conecte-o ao localhost e execute um pequeno servidor como lighttpd ou thttpd que suporta CGI ou um método semelhante para servir conteúdo dinâmico. Se os dados de que você precisa já tiverem sido baixados de um servidor da Web, simplesmente aponte HTTPFS para ele.