-
input.txt > grep fooEste é provavelmente um erro. Ele executa o comandoinput.txte redireciona a saída para um arquivo chamadogrep. Ofooé um argumento para o comandoinput.txt. -
grep foo < input.txtIsso procura a stringfoona entrada proveniente deinput.txt.grepnão obtém um nome de arquivo na linha de comando, então ele funcionará na entrada padrão. O shell, através do redirecionamento, garantirá que o conteúdo do arquivoinput.txtseja entregue no fluxo de entrada padrão paragrep. -
cat input.txt | grep fooÉ semelhante ao anterior, mas o fluxo de entrada padrão degrepagora está conectado a um canal através do qual o comandocatentrega o conteúdo do arquivoinput.txt. O comandocatgrava em seu fluxo de saída padrão, que é conectado ao fluxo de entrada padrão degreppelo canal. -
grep foo input.txtIsso faz com quegrepabra o arquivoinput.txte procure a stringfoonele. Não usa o fluxo de entrada padrão.
Em geral:
-
Um canal (
|) conecta o fluxo de saída padrão de seu lado esquerdo com o fluxo de entrada padrão de seu lado direito. -
Um redirecionamento de entrada (
<) redireciona de um arquivo para o fluxo de entrada padrão. -
Um redirecionamento de saída (
>) redireciona a saída padrão para um arquivo. -
Fluxos de entrada e saída podem ser redirecionados ao mesmo tempo, por exemplo, usando
commandname <inputfile >outputfilee um comando pode ler e gravar em um pipe, como o segundo comando emcommand1 | command2 | command3. -
O redirecionamento e a tubulação podem ser combinados:
cat <input.txt | grep foo >output.txt.
Muitos utilitários Unix usam um nome de arquivo de entrada como um argumento opcional e usarão a entrada padrão se nenhum nome de arquivo for fornecido.
Alguns utilitários Unix somente funcionam na entrada padrão, como tr , por exemplo.
Bash e alguns outros shells, como ksh , também suportam o redirecionamento de uma string para a entrada padrão usando <<<"string" (chamado here-string ), e a maioria dos shells entendem aqui -documentos (veja isto).