Como o Linux determina a ordem de operação dos comandos que executam redirecionamentos combinados?

0

Como estamos cientes de que, a partir do seguinte comando, a saída de less --help | grep -i examine é redirecionada para o arquivo examine-files-in-less , Existe alguma ordem genérica de operação usada pelo linux? para BODMAS rule que temos em matemática?

less --help | grep -i examine > examine-files-in-less
    
por Prem 23.02.2018 / 10:04

1 resposta

2

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 ".

    
por 23.02.2018 / 10:56