Os comandos canalizados são executados simultaneamente. Quando você executa ps | grep …
, é a sorte do sorteio (ou uma questão de detalhes do funcionamento do shell combinada com o agendamento de afinação profunda nas entranhas do kernel) para saber se ps
ou grep
começa primeiro, e em qualquer caso continuam a executar concorrentemente.
Isso é muito comumente usado para permitir que o segundo programa processe os dados conforme eles saem do primeiro programa, antes que o primeiro programa tenha concluído sua operação. Por exemplo
grep pattern very-large-file | tr a-z A-Z
começa a exibir as linhas correspondentes em letras maiúsculas, mesmo antes de grep
terminar de percorrer o arquivo grande.
grep pattern very-large-file | head -n 1
exibe a primeira linha correspondente e pode parar o processamento antes que grep
termine de ler seu arquivo de entrada.
Se você ler em algum lugar que programas encadeados executados em seqüência, elimine este documento. Os programas canalizados são executados simultaneamente e sempre têm.