Execute um comando que retorne uma string ao ler um arquivo [duplicado]

0

Eu tenho essa ideia e talvez não seja viável, mas acho que vale a pena perguntar.

Digamos que um usuário esteja executando este comando:

cat ~/file.txt

Sempre que algo tentar ler a partir desse arquivo, eu gostaria de executar um script ou comando em segundo plano e retornar a resposta desse script como conteúdo.

De alguma forma, gosto de fazer:

ln -s /folder /symlink

Mas para scripts (ideia do que tenho em mente):

symlinkcommand /filepath/file.txt "command to run"

Espero ter me esclarecido. Por favor, responda com suas idéias e sugestões, se houver.

Obrigado.

    
por Danny Coulombe 02.05.2016 / 15:44

2 respostas

2

O que você está procurando é possível, mas talvez não exatamente como você imagina. A maneira como eu o vi com mais frequência (e é admitidamente uma ocorrência muito rara) é criar o arquivo que está sendo lido em um arquivo especial chamado pipe (aka FIFO), usando o comando mknod :

mknod file.txt p

Você precisaria então iniciar o script que deseja usar para gerar o "conteúdo do arquivo" em um shell separado e fazer com que ele seja reiniciado automaticamente quando for concluído para permitir várias leituras desse arquivo especial. O STDOUT do script seria redirecionado para o pipe nomeado e o script pausaria até que algum outro processo - o processo do usuário original - começasse a ler o canal de alguma forma. Assim que o script terminasse, o sinal "EOF" se propagaria para o processo do usuário, fazendo com que tudo parecesse normal.

    
por 02.05.2016 / 16:25
0

A maneira mais simples para você é usar alias bash , como exemplo Caso você esteja falando sobre a entrada de comandos do usuário.

Outra maneira de fazer isso é o sistema de arquivos no espaço do usuário FUSE

Implementação em Python do sistema de arquivos básico do fusível - link

Infelizmente, a lista de sistemas de arquivos de fusíveis está quebrada (estava no sourceforge do FUSE, eles foram movidos, a lista não é), e quem sabe, talvez já tenha feito isso.

    
por 02.05.2016 / 20:59