Crie um pipe nomeado:
mkfifo pipe
Verifique se ele não será fechado (consulte esta resposta ):
exec 3<>pipe
Alimente seu script a partir do canal:
<pipe your_script.sh
# or if you want to see incoming data
<pipe tee >(your_script.sh)
Em seguida, em outro terminal, use echo
, printf
ou qualquer outra coisa:
echo "/some/path/or/another/input" > pipe
ou
cat large_input.txt > pipe
ou
script_that_generates_input.sh > pipe
Mas cuidado com a condição de corrida! Não alimente o tubo de duas ou mais fontes ao mesmo tempo; sempre espere o comando de alimentação atual sair antes de executar o próximo. Observe que, se uma fonte transmitir muitos dados, ela poderá ser mantida no meio do caminho, até que o lado de recebimento processe os dados. Coloque mbuffer
(com argumentos que se ajustem ao seu caso de uso) antes de your_script.sh
para criar um buffer que possa armazenar mais dados de entrada antes que qualquer comando de alimentação seja colocado em espera.