Supressão da saída original

0

O que ou como o shell suprime a saída ao usar pipes em um script? Vamos dizer que temos código

cat file | wc -l

apenas o número de linhas é impresso. Onde o shell armazena o conteúdo do arquivo? O mesmo com por exemplo encontrar

find . -type f -exec grep -o 'hello' {} \; | wc -l

Como o shell faz isso?

    
por trolkura 19.04.2016 / 22:00

2 respostas

2

Isso é bem descrito aqui e aqui .

Então, no seu exemplo:

cat file | wc -l

A saída produzida por cat é direcionada para o fluxo stdout que está conectado via pipe ao fluxo stdin de wc .

Quanto à implementação real, cada canal é associado a um buffer de um determinado tamanho. Esse buffer é preenchido com dados de stdout do processo à esquerda e consumido por stdin do processo à direita. Ambos os processos estão sendo executados em paralelo e existe um mecanismo para bloquear o processo à esquerda, caso o processo correto não consiga consumir todos os dados com rapidez suficiente e o buffer esteja sendo preenchido.

Para mais detalhes, consulte aqui .

    
por 19.04.2016 / 22:29
1

Eu não tenho a resposta técnica completa, mas nos exemplos que você deu, o shell está simplesmente conectando o descritor de arquivo stdout ao descritor de arquivo stdin do segundo comando. Os dados não são armazenados em nenhum lugar, exceto a memória necessária para armazenar os dados à medida que passam de um processo para outro.

    
por 19.04.2016 / 22:09

Tags