Vitajte v ďalší piatok ...
Je čas spoznať malú časť terminálu. Po dlhom premýšľaní som sa rozhodol vytvoriť príspevok o štandardné toky; Aj keď to bude povrchné, myslím si, že je to niečo, čo by mal každý vedieť.
Štandardný stream
Štandardný stream Skladá sa z niekoľkých komunikačných kanálov medzi používateľom a terminálom. Tieto „kanály“ vstupu / výstupu zobrazujú alebo zachytávajú informácie, keď sa vykoná príkaz.
3 I / O pripojenia sú: stdin Štandardný vstup, stdout Štandardný výstup, stderr Štandardná chyba.
stdin: Štandardný vstup
Štandardným vstupom je spôsob, akým zachytávame informácie z príkazu, a to buď potrubím, presmerovaním, klávesnicou atď. Identifikujeme ho deskriptorom súboru 0.
Príklad stdin by bol:
zoradiť <výpis
Berie všetky informácie, ktoré sú na zozname - v tomto prípade náhodne napísané čísla - a pri presmerovaní súboru na príkaz ls zoradí číselný zoznam podľa abecedy. V tomto príklade sú príznaky implicitné.
stdout: Štandardný výstup
Štandardný výstup, ako už z jeho názvu vyplýva, zobrazuje výstup príkazu cez konzolu. Ak napíšeme ls, všetky informácie, ktoré nám zobrazuje na obrazovke, sú štandardným výstupom. Predstavuje ho deskriptor 1.
Teraz sa pokúsim vytvoriť inštanciu stdin a stdout pomocou skriptu napísaného v jazyku bash, jednoducho preto, že milujem bash hahaha. 🙂
test.sh
#! / bin / bash if [-t 0]; potom ozvite „Používate štandardný výstup“ elif [-t 1]; potom echo "Používate stdin" else echo "Brutálna chyba" fi
Teraz snímka obrazovky, ktorá ukazuje, ako sa skript používa. Pri presmerovaní alebo použití kanálu so skriptom použite test -t vedieť, či je vykonaný iba štandardný skript, a ak nie, je to zjavne štandardné.
bash test.sh ls | bash test.sh bash test.sh </ etc / passwd
Nezabudnite upraviť príkaz a cvičiť, aby ste sa naučili.
stderr: Štandardná chyba
Štandardná chyba je spôsob, akým programy zobrazujú chyby alebo diagnostiku. Predstavuje ho deskriptor 2.
Aby sme pochopili tento koncept, je to situácia: keď chceme uložiť chybu z príkazu, prvou vecou, o ktorej premýšľame, je presmerovanie výstupu na obyčajný text.
ls> info.txt
Toto by fungovalo, informácie o príkaze sa uložia do súboru vo formáte obyčajného textu. Pri ukladaní chyby sa však neuloží, ale zobrazí sa na obrazovke a súbor vo formáte obyčajného textu je prázdny.
Namiesto toho, ak použijeme 2> na označenie uloženia stderr do súboru:
je foo 2> info.txt
Teraz uloží informácie o chybe do textového súboru.
Väčšina Mušla povoliť ukladanie stderr a stdout do jedného príkazu pomocou príkazu &>, kde Foo je neexistujúci adresár
ls Stiahnutie Foo &> info.txt
Tento súbor bude obsahovať informácie o chybe pri spustení ls na Foo a zoznam adresárov bude uvedený v zozname Na stiahnutie.
A na záver, čo robí ten slávny 2> & 1?
Jednoduché, presmerujte stderr na štandardný výstup. To & v strede> a 1 znamená, že bude presmerovaný na štandardný výstup. Keby tam nebol, bolo by to niečo ako ... "presmerovať chybu na súbor 1".
A s týmto je možné presmerovať:
- štandardný výstup do súboru
- stderr do súboru
- stdout to stderr
- stderr na stdout
- stderr a stdout do súboru
- okrem iného
To je pre dnešných ľudí všetko. Čítame a ďakujeme, že ste sa zastavili. 😀
Zaujímavé. Vďaka vašim tutoriálom sa mi Bash páči oveľa viac.
Vážený, zaujímavé, ale v nasledujúcom riadku máte chybu:
„A pri presmerovaní súboru na príkaz ls“ by to malo byť „a pri presmerovaní súboru na príkaz na zoradenie“.
Pozdrav.
Na začiatku textu je chyba, keď označíte príkaz «ls», mal by to byť «sort»:
"Vezmite všetky informácie, ktoré sú na zozname - v tomto prípade náhodne napísané čísla - a presmerujte súbor na príkaz ls (tu by to bolo zoradené)"
Zdravím a ďakujem za zdieľanie vašej práce
To je skvelé pre cron, kde chcete vyprázdniť výstup (/ dev / null), ale chyby uložiť do súborov. Keď to tiež urobím, zvyčajne pomocou príkazu date presne určím, kedy zlyhali.
Bash (sh) má tieto nástroje tak vyvinuté filozofiou Unixu „urob jednu vec a urob ju dobre“
No nič som nezistil
Haha, to je celkom dobre vysvetlené, čomu si nepochopil?