Como posso criar um pseudoarquivo que obtém seu conteúdo de um comando toda vez que é lido

Como posso criar um pseudoarquivo que obtém seu conteúdo de um comando toda vez que é lido

Quero criar algo semelhante a um arquivo (que possa ser lido como um arquivo comum), que sempre que for lido, obtenha a saída de um comando.

Por exemplo, se eu fizer isso echo $RANDOM > test, posso ligar cat teste ele exibirá o número aleatório gerado.

Exceto que eu precisaria que toda vez que eu chamasse cat test(ou lesse de qualquer outra forma), meu comando gerador fosse chamado ( echo $RANDOMno meu exemplo, mas na verdade ele gerará mais dados - cerca de 1kb).

Acho que a melhor aposta seria criar algum tipo de arquivo/driver de dispositivo especial de dispositivo? O que eu preciso é realmente semelhante a/dev/zero ou/dev/random. É possível criá-lo de forma simples? Usar a biblioteca gnu/sh padrão seria o ideal?

Agradecemos antecipadamente por qualquer dica!

Responder1

Use a funcionalidade de pipes nomeados:

mkfifo myfancypipe;
while true; do bash -c 'echo $RANDOM' > myfancypipe; done

Agora vá para outro terminal e cada vez que você ligar:

cat myfancypipe

Você obterá informações deecho $RANDOM

informação relacionada