Čtu knihu, je tam napsáno:
Každý proces má k dispozici alespoň tři komunikační kanály:„standardní
vstup“ (STDIN), „standardní výstup“ (STDOUT) a „standardní chyba“ (STDERR).Většina příkazů přijímá svůj vstup ze STDIN a zapisuje svůj výstup do STDOUT.
Zapisují chybové zprávy do STDERR. Tato konvence vám umožňuje spojovat
příkazy dohromady jako stavební bloky pro vytváření složených kanálů.Shell interpretuje symboly
<
,>
a>>
jako instrukce pro přesměrování vstupu nebo výstupu příkazu do nebo ze souboru.Chcete-li připojit STDOUT jednoho příkazu k STDIN jiného, použijte
|
symbol, běžně známý jako dýmka.ps -ef | grep httpd
V zásadě se tedy říká, že standardní vstup je příkaz, který umožňuje uživateli zapisovat do souboru, zatímco standardní výstup je příkaz, který má výstup pro zápis bash shellu do shellu, a standardní chyba je stejně jako výstup, ale je pouze vyvolán, když dojde k chybě v systému souborů. Pak se dostaneme k části propojení STDOUT a STDIN a já jsem ztracen.
Přijatá odpověď:
Standardní vstup a standardní výstup nejsou příkazy.
Představte si příkazy jako stroje v továrně s montážní linkou. Většina strojů je navržena tak, aby měla jeden dopravníkový pás pro přívod dat a jeden dopravníkový pás pro odvádění dat; jedná se o standardní vstup a standardní výstup. Standardní chybou je otvor na boku stroje, kam může vyhazovat zmetky.
+-------+ +------------------+ +------------------+ +------+
| input | | machine A | | machine B | |output|
| reser |=====|<stdin stdout>|=======|<stdin stdout>|=====|bucket|
| ‑voir | → | stderr | → | stderr | → | |
+-------+ +------------------+ +------------------+ +------+
|| ||
Výše uvedené schéma ukazuje dopravníkový pás, který prochází dvěma stroji. Data pocházejí ze vstupního zásobníku vlevo, jsou přiváděna do stroje A, poté je výstup dopravován dále do stroje B (pro nějž je vstupem) a výstup stroje B je ukládán do výstupní nádoby vpravo.
V unixových termínech se tomu říká potrubí. Metafora je to instalatérství:potrubí spojuje stroj A se strojem B. Syntaxe shellu pro potrubí výše je
<input-file.txt commandA | commandB >output-file.txt
<
symbol přesměrování říká shellu, aby se připojil commandA
standardní vstup do souboru input-file.txt
před spuštěním commandA
. (Přesměrování můžete umístit před nebo za název příkazu.) >
symbol přesměrování říká shellu, aby se připojil commandB
standardní výstup do output-file.txt
. Trubka („|
“) symbol uprostřed říká shellu, aby připojil commandA
standardní výstup do commandB
standardní vstup před jejich spuštěním.
Příkazy mohou mít více než jeden vstup a více než jeden výstup, ale to je materiál na jiný den.