Preusmerite stdout in stderr v datoteko

Redirect Stdout Stderr File



Ko kateri koli izhod ukaza preusmerite v datoteko, boste opazili, da so sporočila o napakah natisnjena v terminalskem oknu. Vsak ukaz, izveden v kateri koli lupini Linuxa, na primer bash, uporablja tri običajne V/I tokove. Za predstavitev vsakega toka se uporablja številski deskriptor datoteke.

  • Standardni vhodni tok (stdin): 0
  • Standardni izhodni tok (stdout): 1
  • Standardni tok napak (stderr): 2

V tem prispevku bomo razumeli informacije, ki so pod preusmeritvijo stdout in stderr v datoteko.







Standardni izhod (stdout):

Vsak operacijski sistem, ki temelji na Linuxu, je prepričan o privzetem mestu za izvedeni ukaz. Vsi se nanašajo na ta pojem kot stdout ali standardni izhod, da olajša zvok. Vaša lupina Bash ali Zsh nenehno išče privzeto izhodno lokacijo. Ko lupina zazna nov izhod, ga prikaže na terminalnem zaslonu, da ga vidite. V nasprotnem primeru bo izhod poslal na privzeto mesto.



Standardna napaka (stderr):

Standardna napaka ali stderr je podoben standardnemu vhodu in izhodu, vendar se uporablja za shranjevanje sporočil o napakah. Standardno napako lahko s terminalom preusmerite v ukazno vrstico ali datoteko. Če želite posneti ali shraniti sporočila v ločeno datoteko dnevnika ali skriti sporočila o napakah, vam bo pomagala preusmeritev stderr. Zdaj pa pojdimo na praktično stran preusmeritve stdout in stderr.



Preusmeritev stdout in stderr v datoteko:

Ker je preusmeritev metoda zajema programskega izhoda in ga pošlje kot vhod v drug ukaz ali datoteko. Tokove V/I lahko preusmerite tako, da uporabite operater n>, kjer je n številka deskriptorja datoteke. Za preusmeritev stdout uporabimo 1>, za stderr pa 2> kot operater.





Ustvarili smo datoteko sample.txt za shranjevanje preusmerjenih izhodov v naš trenutni imenik.



(Ukaz> datoteka) velja za klasični operater preusmeritve, ki preusmeri le standardni izhod s standardno napako, prikazano v terminalu. Prikazali bomo tudi različne možnosti za preusmeritev stderrja.

Preusmerjanje stderr in stdout na ločene datoteke:

Spodaj je sintaksa ukaza za preusmeritev stdout in stderr na ločene datoteke.

ukaz >ven2>napaka

Spodnji ukaz bo preusmeril izhod v datoteko out, sporočila o napakah pa v datoteko napake.

$mačkasample.txt>ven2>napaka

Preusmeritev stderrja na stdout:

Običajna praksa je preusmeritev stderrja s standardnim izhodom programa za shranjevanje vsega v eno datoteko. Tukaj je sintaksa ukaza za preusmeritev stderr na stdout:

ukaz >ven2> &1$ls >samplefile.txt2> &1

$mačkasamplefile.txt

> out preusmeritve preusmeri stdout na samplefile.txt, 2> & 1 pa preusmeri stderr na trenutno lokacijo stdout.

Če je stderr najprej preusmerjen na stdout, uporabite spodnji ukaz, da preusmerite stdout v datoteko.

ukaz 2> &1 > mapa$ls -do 2> &1 >samplefile.txt

$mačkasamplefile.txt

&> se uporablja tudi za isto funkcijo, ki jo izvaja 2> & 1.

ukaz &> mapa$ls &>samplefile.txt

$mačkasamplefile.txt

Preusmeritev stdout in stderr v eno datoteko:

Vse lupine ne podpirajo tega preusmerjanja obrazca, vendar ga bash in Zsh podpirata. Stdout in stderr lahko preusmerite z uporabo naslednje sintakse.

ukaz &>ven$mačkasample.txt&>ven

V prihajajočem razdelku članka bomo preverili ločen primer preusmeritve stdout in stderr.

Preusmeritev stdouta na datoteko:

Standardni izhod je predstavljen z 1 na seznamu številk deskriptorjev datotek. Za ukaz za preusmeritev brez številke deskriptorja datotek je terminal nastavil vrednost na 1. Sintaksa za preusmeritev stdouta v datoteko je podana na naslednji način:

ukaz > mapa

Za shranjevanje standardnega izhoda ukaza ls -al uporabljamo datoteko sample.file

$ls -do >sample.txt

$mačkasample.txt

ukaz 1> mapa$ls 1>sample.txt

$mačkasample.txt

Preusmeritev stderrja v datoteko:

Za preusmeritev stderrja v datoteko uporabite operator 2>.

ukaz 2> mapa $ls -do 2>sample.txt

Izvedbo za stderr in stdout lahko združimo v en sam ukaz za preusmeritev.

ukaz 2>error.txt1>output.txt

V spodnjem primeru bodo sporočila o napakah shranjena v datoteki error.txt, kjer bo output.txt imel standardni izhod ukaza ls.

$ls 2>error.txt1>output.txt

$mačkaoutput.txt

Zaključek:

Koncept preusmeritve in deskriptorjev datotek za V/I tokove je pri delu v terminalu Linux zelo dragocen. V tem prispevku smo govorili o rednih V/I tokovih, vključno s stdout in stderr. Prvi del te objave vam prinaša podrobne informacije o preusmeritvi, V/I tokovih in opisu numeričnih datotek. Nato ste videli praktični primer za različne oblike preusmeritve stdout in stderr.