-
input.txt > grep foo
Este é provavelmente um erro. Ele executa o comandoinput.txt
e redireciona a saída para um arquivo chamadogrep
. Ofoo
é um argumento para o comandoinput.txt
. -
grep foo < input.txt
Isso procura a stringfoo
na entrada proveniente deinput.txt
.grep
nã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.txt
seja entregue no fluxo de entrada padrão paragrep
. -
cat input.txt | grep foo
É semelhante ao anterior, mas o fluxo de entrada padrão degrep
agora está conectado a um canal através do qual o comandocat
entrega o conteúdo do arquivoinput.txt
. O comandocat
grava em seu fluxo de saída padrão, que é conectado ao fluxo de entrada padrão degrep
pelo canal. -
grep foo input.txt
Isso faz com quegrep
abra o arquivoinput.txt
e procure a stringfoo
nele. 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 >outputfile
e 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).