Sto leggendo un libro, dice:
Ogni processo ha a disposizione almeno tre canali di comunicazione:"standard
input" (STDIN), "standard output" (STDOUT) e "standard error" (STDERR).
La maggior parte dei comandi accetta il loro input da STDIN e scrivono il loro output su STDOUT.
Scrivono messaggi di errore su STDERR. Questa convenzione ti consente di mettere insieme
comandi come blocchi costitutivi per creare pipeline composite.
La shell interpreta i simboli <
, >
e >>
come istruzioni per reindirizzare l'input o l'output di un comando verso o da un file.
Per collegare lo STDOUT di un comando allo STDIN di un altro, utilizzare il |
simbolo, comunemente noto come pipa.
ps -ef | grep httpd
Quindi fondamentalmente quello che sta dicendo è che l'input standard è un comando che consente all'utente di scrivere su un file, mentre l'output standard è un comando che ha l'output di scrittura della shell bash nella shell, e l'errore standard è proprio come l'output ma è solo invocato quando si verifica un errore nel file system. Poi arriviamo alla parte di collegare STDOUT e STDIN e mi sono perso.
Risposta accettata:
Lo standard input e lo standard output non sono comandi.
Immagina i comandi come macchine in una fabbrica con una catena di montaggio. La maggior parte delle macchine è progettata per avere un nastro trasportatore per inserire i dati e un nastro trasportatore per far uscire i dati; sono rispettivamente lo standard input e lo standard output. L'errore standard è un'apertura sul lato della macchina dove può espellere gli scarti.
+-------+ +------------------+ +------------------+ +------+
| input | | machine A | | machine B | |output|
| reser |=====|<stdin stdout>|=======|<stdin stdout>|=====|bucket|
| ‑voir | → | stderr | → | stderr | → | |
+-------+ +------------------+ +------------------+ +------+
|| ||
Il diagramma sopra mostra un nastro trasportatore che passa attraverso due macchine. I dati provengono dal serbatoio di input a sinistra, vengono inviati alla macchina A, quindi l'output viene convogliato ulteriormente alla macchina B (per la quale è input) e l'output della macchina B viene depositato nel secchio di output a destra.
In termini unix, questo è chiamato pipeline. La metafora è quella dell'impianto idraulico:un tubo collega la macchina A alla macchina B. La sintassi della shell per la tubazione sopra è
<input-file.txt commandA | commandB >output-file.txt
Il <
il simbolo di reindirizzamento dice alla shell di connettere commandA
è l'input standard del file input-file.txt
prima di avviare commandA
. (Puoi inserire il reindirizzamento prima o dopo il nome del comando.) Il >
il simbolo di reindirizzamento dice alla shell di connettere commandB
l'output standard di output-file.txt
. La pipe ("|
Il simbolo ") al centro dice alla shell di connettere commandA
l'output standard di commandB
è l'input standard prima di avviarli.
I comandi possono avere più di un input e più di un output, ma questo è materiale per un altro giorno.