Vítejte na další pátek ...
Je čas poznat malou část terminálu. Po dlouhém přemýšlení jsem se rozhodl vytvořit příspěvek o standardní proudy; Ačkoli to bude povrchní, myslím, že je to něco, co by měl každý vědět.
Standardní stream
Standardní stream Skládá se z několika komunikačních kanálů mezi uživatelem a terminálem. Tyto vstupní / výstupní „kanály“ zobrazují nebo zachycují informace při provádění příkazu.
3 I / O připojení jsou: stdin Standardní vstup, stdout Standardní výstup, stderr Standardní chyba.
stdin: Standardní vstup
Standardní vstup je způsob, jakým zachycujeme informace z příkazu, a to buď pomocí potrubí, přesměrování, klávesnice atd. Identifikujeme jej deskriptorem souboru 0.
Příkladem stdin by bylo:
třídit <výpis
Vezme všechny informace, které jsou v seznamu - v tomto případě náhodně zapsaná čísla - a při přesměrování souboru na příkaz ls seřadí číselný seznam podle abecedy. V tomto příkladu jsou příznaky implicitní.
stdout: Standardní výstup
Standardní výstup, jak jeho název napovídá, zobrazuje výstup příkazu přes konzolu. Pokud napíšeme všechny informace, které nám zobrazují na obrazovce, jsou standardním výstupem. Je reprezentován deskriptorem 1.
Nyní se pokusím vytvořit instanci stdin a stdout pomocí skriptu napsaného v bash, jednoduše proto, že miluji bash hahaha. 🙂
test.sh
#! / bin / bash if [-t 0]; potom zopakujte „Používáte standardní výstup“ elif [-t 1]; pak echo "Používáte stdin" else echo "Brutální chyba" fi
Nyní snímek obrazovky, který ukazuje, jak používat skript. Při přesměrování nebo použití kanálu se skriptem použijte test -t vědět, jestli je spuštěn pouze standardní výstup, a pokud ne, je to zjevně standardní.
bash test.sh ls | bash test.sh bash test.sh </ etc / passwd
Nezapomeňte upravit příkaz a cvičit, abyste se naučili.
stderr: Standardní chyba
Standardní chyba je způsob, jakým programy zobrazují chyby nebo diagnostiku. Představuje jej deskriptor 2.
Abychom pochopili koncept, je to situace: když chceme uložit chybu z příkazu, první věc, o které přemýšlíme, je přesměrování výstupu na prostý text.
ls> info.txt
To by fungovalo, informace o příkazu budou uloženy v souboru prostého textu. Při ukládání však chybu neukládá, ale zobrazuje ji na obrazovce a prostý textový soubor je prázdný.
Místo toho použijeme 2> k označení uložení stderr v souboru:
je foo 2> info.txt
Nyní uloží informace o chybě do textového souboru.
Většina Skořápka povolit stderr a stdout, aby byly uloženy v jediném příkazovém příkazu s &>, kde Foo je neexistující adresář
ls Ke stažení Foo &> info.txt
Tento soubor bude obsahovat informace o chybě při spuštění ls na Foo a zobrazí seznam adresářů v části Stahování.
A konečně, co je to slavné 2> & 1?
Jednoduché, přesměrujte stderr na standardní výstup. To & ve středu> a 1 znamená, že bude přesměrováno na stdout. Pokud by tam nebyl, bylo by to něco jako ... "přesměrovat chybu do souboru 1".
A s tím je možné přesměrovat:
- standardní výstup do souboru
- stderr do souboru
- stdout to stderr
- stderr na stdout
- stderr a stdout do souboru
- mimo jiné
To je pro dnešní lidi vše. Četli jsme a děkujeme, že jste se zastavili. 😀
Zajímavý. Díky vašim tutoriálům se mi Bash líbí mnohem víc.
Vážení, zajímavé, ale v následujícím řádku máte chybu:
"A při přesměrování souboru na příkaz ls" by to mělo být "a při přesměrování souboru na příkaz řazení".
Pozdrav.
Na začátku textu je chyba, když označíte příkaz „ls“, měl by to být „sort“:
"Vezměte všechny informace, které jsou v seznamu - v tomto případě náhodně zapsaná čísla - a přesměrujte soubor na příkaz ls (zde by se to dalo třídit)"
Zdravím a děkuji za sdílení vaší práce
To je skvělé pro cron, kde chcete vyprázdnit výstup (/ dev / null), ale chyby uložit do souborů. Také, když to udělám, obvykle používám příkaz date k určení, kdy přesně selhaly.
Bash (sh) má tyto nástroje tak vyvinuté unixovou filozofií „dělat jednu věc a dělat to dobře“
No nic jsem nezjistil
Haha, to je docela dobře vysvětleno, čemu jsi nerozuměl?