A entrada padrão e a saída padrão não são comandos.
Imagine comandos como máquinas em uma fábrica com uma linha de montagem. A maioria das máquinas é projetada para ter uma correia transportadora para alimentar os dados e uma correia transportadora para alimentar os dados; eles são a entrada padrão e a saída padrão respectivamente. O erro padrão é uma abertura no lado da máquina onde pode ejetar rejeições.
+-------+ +------------------+ +------------------+ +------+
| input | | machine A | | machine B | |output|
| reser |=====|<stdin stdout>|=======|<stdin stdout>|=====|bucket|
| ‑voir | → | stderr | → | stderr | → | |
+-------+ +------------------+ +------------------+ +------+
|| ||
O diagrama acima mostra uma correia transportadora que passa por duas máquinas. Os dados vêm do reservatório de entrada à esquerda, são alimentados à máquina A, em seguida, a saída é transportada para a máquina B (para a qual é entrada) e a saída da máquina B é depositada no depósito de saída à direita.
Em termos unix, isso é chamado de pipeline . A metáfora é a do encanamento: um tubo conecta a máquina A à máquina B. A sintaxe do shell para o duto acima é
<input-file.txt commandA | commandB >output-file.txt
O símbolo <
redirecionamento diz ao shell para conectar a entrada padrão de commandA
a o arquivo input-file.txt
antes de lançar commandA
. (Você pode colocar o redirecionamento antes ou depois do nome do comando.) O símbolo de redirecionamento >
diz ao shell para conectar a saída padrão de commandB
a output-file.txt
. O símbolo pipe (" |
") no meio diz ao shell para conectar a saída padrão de commandA
à entrada padrão de commandB
antes de iniciá-los.
Os comandos podem ter mais de uma entrada e mais de uma saída, mas isso é material para outro dia .