Esta é a substituição de processos .
O resultado final de ambas as formas que você dá deve ser basicamente o mesmo; as diferenças são que
- como você aponta, a substituição de processo executa ambos os processos simultaneamente;
- seu segundo formulário usa um arquivo em um sistema de arquivos, então você precisa de espaço para armazená-lo (e, idealmente, removê-lo depois).
Tecnicamente, a E / S entre processos envolvendo a substituição de processos se comporta como pipes, não como arquivos. (Isso pode muito bem ser um detalhe de implementação).
Os programas escritos corretamente não devem exibir diferenças em seus resultados porque eles são executados simultaneamente; por exemplo,
tail -n 1 <(seq 1 10000000)
mostra corretamente o último número na sequência, enquanto tenta fazer isso manualmente com
seq 1 10000000 > blah &
tail -n 1 blah
falhará porque tail
mostra qual é a última linha armazenada no momento em que é executada, não espera que seq
seja concluído. Seu segundo formulário aguarda corretamente neste caso.
Você pode, no entanto, ver diferenças no comportamento externo . Por exemplo,
head -n 1 <(seq 1 1000000000)
termina imediatamente (mesmo seq
, graças ao comportamento do pipe), enquanto
seq 1 1000000000 > blah
head -n 1 blah
leva muito tempo para ser executado. Esse tipo de diferença pode significar que substituir um formulário pelo outro não é apropriado.