Stderr



Standarta kļūdas ilustrācija

Stderr , zināms arī kā standarta kļūda , ir noklusējums faila deskriptors kur process var rakstīt kļūdu ziņojumi .



In Unix līdzīgi operētājsistēmas , piemēram, Linux , macOS X un BSD , stderr definē POSIX standarta . Tās noklusējuma faila deskriptora numurs ir divi .

Terminālā standarta kļūda pēc noklusējuma ir lietotāja ekrāns.



Stderr uz Linux komandrindas

In bash , standarta kļūdu var novirzīt uz komandrinda . Notiek novirzīšana stderr var būt noderīgi, ja jums jāaptver visi kļūdu ziņojumi atsevišķi žurnāls failu vai pilnībā paslēpiet kļūdu ziņojumus.

Piemēram, apsveriet sekojošo atrast komanda:



 find / -iname '*something*'
 /usr/share/doc/something /usr/share/doc/something/examples/something_random find: '/run/udisks2': Permission denied find: '/run/wpa_supplicant': Permission denied /usr/share/something /usr/games/something

Mēs saņemam kļūdas, jo atrast mēģina meklēt dažus sistēmas direktorijus, kuru mums nav atļauju Lasīt. Rindas, kurās teikts “Atļauja liegta”, ir kļūdu ziņojumi, un uz tām tika rakstīts stderr . Pārējās rindas tika rakstītas stdout ( standarta izeja ). Pēc noklusējuma viņi abi tiek rādīti terminālā.

Slēpties stderr , mēs tos varam novirzīt, atsaucoties uz standarta kļūdas faila deskriptora numuru, divi un “novirzīšanas izvades” operators, > .

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

Kļūdas vairs netiek parādītas, jo visa izvade uz stderr tika novirzīts uz / dev / null , īpašā ierīce Linux, kas “nekur nepazūd”.

Visas kļūdas mēs varētu arī novirzīt uz failu:

 find / -iname '*something*' 2>output.txt
 /usr/share/doc/something /usr/share/doc/something/examples/something_random /usr/share/something /usr/games/something

Tagad, ja jūs kaķis satura saturs output.txt , jūs redzēsiet, ka kļūdu ziņojumi tika saglabāti tur:

 cat output.txt
 find: '/run/udisks2': Permission denied find: '/run/wpa_supplicant': Permission denied

Detalizētu informāciju par datu straumju novirzīšanu skatiet sadaļā novirzīšana bash .