Comportamento de stdin / stdout em conjunto com subshells e comando cd

5

Eu tenho a seguinte série de comandos:

cd / && ls | ( cd /tmp && cat >dumpfile)

Esta série de comandos faz o seguinte: cria um arquivo chamado /tmp/dumpfile . Este arquivo contém uma listagem do diretório raiz.

A saída cd / && ls é canalizada para um subshell. O que eu acho estranho é que no subshell, em vez de cd /tmp engolir a saída ls , o último cat >dumpfile obtém e grava em um arquivo. O que está acontecendo aqui?

    
por Abdull 17.08.2012 / 14:44

2 respostas

7

O pipe configura o stdout para ir de ls para o subshell.

No subshell, cd /tmp e cat são feitos no mesmo processo.

cd /tmp não lê de stdin (o pipe), então quando cat lê de stdin, obtém toda a saída de ls .

    
por 17.08.2012 / 15:27
3

cd não engole a saída porque não quer. Considere isto:

{ ls; date; } | (cd /tmp && date >> date.txt && cat date.txt && cat >dumpfile)

Somente o último cat >dumpfile salvará o stdin proveniente do pipe, porque nenhum dos outros comandos deseja consumi-lo.

    
por 17.08.2012 / 16:19