Co je Stderr?

Stderr, také známý jako standardní chyba, je výchozí deskriptor souboru, kde proces může zapisovat chybové zprávy.

V operačních systémech podobných Unixu, jako je Linux, MacOS X a BSD, je stderr definován standardem POSIX. Výchozí číslo deskriptoru souboru je 2 .

V terminálu je standardní chyba nastavena na obrazovku uživatele.

Stderr na příkazovém řádku Linuxu

V bash může být standardní chyba přesměrována na příkazovém řádku. Přesměrování stderr může být užitečné, pokud potřebujete zachytit jakékoli chybové zprávy do samostatného souboru protokolu nebo skrýt chybové zprávy úplně.

Zvažte například následující příkaz:

 najít / -vnitřní '* něco *' 
 / usr / share / doc / něco / usr / share / doc / something / examples / something_random find: `/ run / udisks2 ': Oprávnění bylo odmítnuto najít:` / run / wpa_supplicant': Oprávnění bylo odepřeno / usr / share / something / usr / games / něco 

Dostáváme chyby, protože hledání se snaží vyhledat několik systémových adresářů, ke kterým nemáme oprávnění číst. Řádky, které říkají "Oprávnění odepřeno" jsou chybové zprávy a byly zapsány do souboru stderr . Ostatní řádky byly zapsány do stdout (standardní výstup). Ve výchozím nastavení se oba zobrazují na terminálu.

Chcete-li skrýt stderr, můžeme je přesměrovat odkazem na číslo deskriptoru standardního chybového souboru, 2 a operátora "přesměrovaného výstupu", > .

 find / -iname '* something *' 2> / dev / null 
 / usr / share / doc / něco / usr / share / doc / something / examples / something_random / usr / share / něco / usr / games / něco 

Chyby se již nezobrazují, protože veškerý výstup do stderr byl přesměrován na / dev / null, což je speciální zařízení v Linuxu, které „nikam nevede“.

Můžeme také přesměrovat všechny chyby do souboru:

 najít / -samostat '* něco *' 2> output.txt 
 / usr / share / doc / něco / usr / share / doc / something / examples / something_random / usr / share / něco / usr / games / něco 

Pokud se vám zobrazí obsah souboru output.txt, zobrazí se zde chybové zprávy:

 cat output.txt 
 find: `/ run / udisks2 ': Oprávnění bylo odmítnuto najít:` / run / wpa_supplicant': Oprávnění bylo odepřeno 

Podrobné informace o přesměrování datových proudů naleznete v tématu přesměrování v bash.

Chybová zpráva, podmínky operačního systému