Estoy leyendo un libro, dice:
Cada proceso tiene al menos tres canales de comunicación disponibles:"entrada estándar
" (STDIN), "salida estándar" (STDOUT) y "error estándar" (STDERR).
La mayoría de los comandos aceptan su entrada desde STDIN y escriben su salida en STDOUT.
Escriben mensajes de error en STDERR. Esta convención le permite encadenar
comandos como bloques de construcción para crear canalizaciones compuestas.
El shell interpreta los símbolos <
, >
y >>
como instrucciones para redirigir la entrada o salida de un comando hacia o desde un archivo.
Para conectar el STDOUT de un comando al STDIN de otro, use el |
símbolo, comúnmente conocido como tubería.
ps -ef | grep httpd
Básicamente, lo que esto dice es que la entrada estándar es un comando que permite al usuario escribir en un archivo, mientras que la salida estándar es un comando que tiene la salida de escritura del shell bash en el shell, y el error estándar es como la salida, pero solo es se invoca cuando hay un error en el sistema de archivos. Luego llegamos a la parte de conectar STDOUT y STDIN y estoy perdido.
Respuesta aceptada:
La entrada estándar y la salida estándar no son comandos.
Imagine los comandos como máquinas en una fábrica con una línea de montaje. La mayoría de las máquinas están diseñadas para tener una cinta transportadora para alimentar datos y una cinta transportadora para alimentar datos; son la entrada estándar y la salida estándar respectivamente. El error estándar es una abertura en el costado de la máquina donde puede expulsar los rechazos.
+-------+ +------------------+ +------------------+ +------+
| input | | machine A | | machine B | |output|
| reser |=====|<stdin stdout>|=======|<stdin stdout>|=====|bucket|
| ‑voir | → | stderr | → | stderr | → | |
+-------+ +------------------+ +------------------+ +------+
|| ||
El diagrama de arriba muestra una cinta transportadora que pasa por dos máquinas. Los datos provienen del depósito de entrada a la izquierda, se alimentan a la máquina A, luego la salida se transmite a la máquina B (para la cual es entrada) y la salida de la máquina B se deposita en el depósito de salida a la derecha.
En términos de Unix, esto se llama canalización. La metáfora es la de la plomería:una tubería conecta la máquina A con la máquina B. La sintaxis de shell para la tubería anterior es
<input-file.txt commandA | commandB >output-file.txt
El <
el símbolo de redirección le dice al shell que conecte commandA
Entrada estándar al archivo input-file.txt
antes de ejecutar commandA
. (Puede colocar la redirección antes o después del nombre del comando). El >
el símbolo de redirección le dice al shell que conecte commandB
La salida estándar de output-file.txt
. La tubería (“|
“) El símbolo en el medio le dice al shell que conecte commandA
Salida estándar de commandB
entrada estándar antes de ejecutarlos.
Los comandos pueden tener más de una entrada y más de una salida, pero eso es material para otro día.