Estou lendo um livro, ele diz:
Todo processo possui pelo menos três canais de comunicação disponíveis: “entrada padrão” (STDIN), “saída padrão” (STDOUT) e “erro padrão” (STDERR).
A maioria dos comandos aceita sua entrada de STDIN e grava sua saída em STDOUT. Eles escrevem mensagens de erro para STDERR. Essa convenção permite agrupar comandos como blocos de construção para criar pipelines compostos.
O shell interpreta os símbolos
<
,>
e>>
como instruções para redirecionar a entrada ou saída de um comando para ou de um arquivo.Para conectar o STDOUT de um comando ao STDIN de outro, use o
|
símbolo, geralmente conhecido como pipe.ps -ef | grep httpd
Então, basicamente, o que isto está dizendo é que a entrada padrão é um comando que permite ao usuário gravar em um arquivo, enquanto a saída padrão é um comando que possui o shell bash para gravar o resultado no shell, e o erro padrão é exatamente como o resultado, mas é apenas chamado quando há um erro no sistema de arquivos. Então chegamos à parte de conectar STDOUT e STDIN e estou perdido.
standard input is a command that allows user to write to a file
Não é um comando, mas um fluxo. As entradas e saídas padrão são como caixas de correio. Quando um programa é iniciado, recebe uma caixa para receber e uma para enviar e-mail. Geralmente, a entrada é proveniente do teclado e é colocada na caixa de entrada, o correio na caixa de saída termina na tela do terminal.
standard output is a command that has the bash shell write output to the shell
O programa realmente não sabe onde pontos de saída padrão. Quando você canaliza A para B (como em
$ A | B
), quando A coloca a correspondência na caixa de saída, ela termina na caixa de entrada de B. B processa a entrada e coloca sua própria correspondência na caixa de saída, que é o que você vê no terminal.Para soltar a metáfora, como mencionado, a entrada / saída padrão são fluxos. A caixa de correio, ou descritor de arquivo , é uma extremidade do fluxo. Tubo é conectar o padrão de A ao padrão de B.
fonte