A sintaxe cat file | command
é considerada um Uso inútil de Cat
. De todas as suas opções, é preciso um desempenho porque ele tem que gerar outro processo no kernel. Por mais insignificante que isso possa parecer, a sobrecarga que as outras formas não têm. Isso foi abordado em questões como: Devo me importar com gatos desnecessários?
Entre as outras duas formas, praticamente não há diferenças de desempenho. STDIN é um nó de arquivo especial que o processo precisa abrir e ler como qualquer outro. Passar um nome de arquivo em vez de STDIN apenas abre um arquivo diferente.
A diferença estaria em quais recursos / flexibilidade você está procurando.
- Passar o nome do arquivo para o programa significaria que o arquivo de entrada era procurado. Isso pode ou não importar para o programa, mas algumas operações podem ser aceleradas se o fluxo for procurado.
- Conhecer o arquivo de entrada real permite que seu programa potencialmente grave nele. Por exemplo,
sed -i
para edição no local. (Nota: como isso tem que criar um novo arquivo nos bastidores, não é um ganho de desempenho em relação a outros redirecionamentos, mas é uma etapa conveniente.) - O uso de redirecionamentos de shell oferece a capacidade de concatenar vários arquivos ou até mesmo usar o redirecionamento de processos.
sed [exp] < file1 file2
ou mesmosed [exp] < <(grep command)
. Detalhes deste caso de uso podem ser encontrados nesta pergunta: Substituição e tubulação do processo