Você pode usar cat
e um canal:
cat file1 file2 file3 ... fileN | ./script
Seu exemplo, usando um pipe e nenhum arquivo temporário:
join file1.txt file2.txt | ./script
Digamos que eu tenha um script chamado script
, que leia stdin
e envie alguns resultados para a tela.
Se eu quisesse alimentar o conteúdo de um arquivo, eu teria digitado:
$ ./script < file1.txt
Mas e se eu quiser alimentar o conteúdo dos vários arquivos para o script da mesma maneira, é possível? O melhor que cheguei até agora foi:
cat file1.txt file2.txt > combined.txt && ./script < combined.txt
Que usa dois comandos e cria um arquivo temporário. Existe uma maneira de fazer a mesma coisa, mas ignorando a criação do arquivo combinado?
Se você não quiser usar um canal, poderá usar o redirecionamento de entrada com a substituição do processo:
./script <(cat file1 file2)
Para adicionar a resposta da @Jonah Braun, se você precisar adicionar a saída do processo ao seu script, ou seja, seu arquivo pode não estar no seu disco, mas acessado via URL
usando curl
ou uma ferramenta semelhante. / p>
Algo parecido com isso pode ser usado para obter stdout
de vários processos e usá-los em um script por meio de stdin
Este será o script para lidar com entrada
Conteúdo de multi-input.sh
:
#!/usr/bin/env bash
while read line; do
echo $line
done
Agora teste:
$ ./multi-input.sh < <(cat <(echo process 1) <(echo process 2) <(echo process 3))
Saída:
process 1
process 2
process 3
<()
transforma o processo em um file
virtual usando fd
, se preferir, por isso <
é necessário para lê-lo. cat
em si não precisa disso porque faz o que faz, concatena arquivos, virtuais ou reais.
Tags bash shell scripting io-redirection