Todos os comandos envolvidos em um pipeline como o da pergunta são iniciados (praticamente) ao mesmo tempo.
Isso significa que os comandos em um pipeline, como
find . ...some other arguments... | sort | uniq -c | sort -nr
estão todos em execução em paralelo.
No entanto, como a saída de um comando é a entrada para o próximo, e como os comandos aguardam que a entrada seja entregue e que a saída seja consumida, os dados sincronizam os comandos no pipeline.
No pipeline acima, por exemplo, o último sort
estará em execução, mas não fará muito até que toda a saída de find
tenha sido consumida pelo primeiro sort
(uma operação de classificação requer que < em> todos dados disponíveis foram lidos).
Os dados, portanto, impõem uma ordenação da esquerda para a direita no processamento feito pelo pipeline.
Em outros comandos compostos, como a lista
ls -l; cat somefile
que é o mesmo que
ls -l
cat somefile
há uma ordem estrita da esquerda para a direita. cat
não será iniciado até que ls
tenha terminado.
Em um comando composto como
test -f filename || echo 'no such file'
há também uma ordem estrita da esquerda para a direita e, aqui, echo
não será executado se test
retornar um status de saída zero.
Veja também, por exemplo, " Emitir com testes booleanos & & e || no bash "e" Precedência de operadores lógicos versus ponto-e-vírgula ".