A remoção do operador de redirecionamento não altera a saída. Por quê?

3

Eu vi esse uso de redirecionamento em algum lugar e achei que era um erro de digitação:

grep root < /etc/passwd

Mas depois que eu corri, eu vi que dá a mesma saída com grep root /etc/passwd :

$ grep root < /etc/passwd
root:x:0:0:root:/root:/bin/bash

$ grep root   /etc/passwd
root:x:0:0:root:/root:/bin/bash

O mesmo acontece com

cat < /etc/passwd
cat   /etc/passwd

No entanto, o redirecionamento é ignorado quando usado com ls :

ls < /etc/passwd

não imprime a mesma saída com

ls  /etc/passwd

O que está acontecendo?

    
por musa 09.09.2011 / 11:05

1 resposta

8

Muitos utilitários que trabalham com arquivos aceitam stdin (entrada padrão) como entrada em fluxo ou aceitam o nome do arquivo como um parâmetro. Seus exemplos < file estão redirecionando a saída do arquivo para o utilitário. O arquivo foi aberto pelo shell e passado para o seu utilitário via stdin .

Por outro lado, com cat file , cat está lidando com a abertura e a leitura do arquivo , e nenhum redirecionamento está envolvido.

ls nunca lê um arquivo, portanto não é necessário um nome de arquivo como parâmetro para abrir e ler o arquivo (ele aceita máscaras de nome de arquivo). Para ls , a ação de redirecionamento é, na verdade, ignorada porque nada no processo lê o arquivo aberto pelo shell ...

Para determinar como qualquer utilitário se comporta, basta digitar man utility-name no terminal ... man é uma contração de manual ... por exemplo. man cat apresenta-lhe o manual do gato

    
por 09.09.2011 / 11:23