Uma solução simples é usar o suporte do Bash para substituição de processos, assim:
myCommand <(grep "xyz" somefile)
Isso conectará a saída do comando grep
a um descritor de arquivo e, em seguida, transmitirá /dev/fd/NNN
(onde NNN
é o número fd) ao seu comando como o arquivo de entrada (por exemplo, seu comando pode realmente executado como myCommand /dev/fd/63
). Esta solução não cria um arquivo temporário.
Você também pode criar um canal nomeado e usá-lo para transferir dados:
$ mkfifo /tmp/myfifo
$ grep "xyz somefile > /tmp/myfifo &
$ myCommand /tmp/myfifo
Mas, na verdade, a primeira solução é mais simples.
Stephane Chazelas comenta:
zsh also has myCommand =(grep xyz somefile) which uses a regular temporary file (for cases where myCommand can't accept a pipe).
Isso é importante porque alguns comandos esperam poder executar acesso aleatório em seu arquivo de entrada, o que não funcionará com um pipe. Usando esta sintaxe, você obtém os benefícios dos arquivos temporários sem precisar se preocupar em limpá-los.