o que significa conectar STDOUT e STDIN?

9

Estou lendo um livro, diz:

Every process has at least three communication channels available to it: “standard input” (STDIN), “standard output” (STDOUT), and “standard error” (STDERR).

Most commands accept their input from STDIN and write their output to STDOUT. They write error messages to STDERR. This convention lets you string commands together like building blocks to create composite pipelines.

The shell interprets the symbols <, >, and >> as instructions to reroute a command’s input or output to or from a file.

To connect the STDOUT of one command to the STDIN of another, use the | symbol, commonly known as a pipe.

ps -ef | grep httpd

Então, basicamente, o que isso 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 tem a saída de gravação do shell bash para o shell e erro padrão é como saída ele é chamado apenas quando há um erro no sistema de arquivos. Então chegamos à parte de conectar STDOUT e STDIN e estou perdido.

    
por JohnMerlino 10.02.2012 / 01:20

2 respostas

25

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 .

    
por 10.02.2012 / 02:09
6

standard input is a command that allows user to write to a file

Não é um comando, mas um fluxo. Entrada e saída padrão são como caixas de correio. Quando um programa é iniciado, é dada uma caixa para receber e uma caixa para enviar e-mail. Normalmente, a entrada vem do teclado e é colocada na caixa de entrada, o correio colocado 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 não sabe realmente onde os pontos de saída padrão. Quando você canaliza A para B (como em $ A | B ), quando A coloca o e-mail na caixa de saída, ele acaba 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 deixar cair a metáfora, como mencionado, as entradas / saídas padrão são fluxos. A caixa de correio, ou descritor de arquivo , é uma extremidade do fluxo. Para pipe é conectar o padrão fora de A ao padrão em B.

    
por 10.02.2012 / 02:14