Peradresuokite stdout ir stderr į failą

Redirect Stdout Stderr File



Kai bet kurią komandų išvestį nukreipiate į failą, pastebėsite, kad klaidos pranešimai spausdinami terminalo lange. Bet kuri komanda, vykdoma bet kuriame „Linux“ apvalkale, pvz., „Bash“, naudoja tris įprastus įvesties/išvesties srautus. Kiekvienam srautui pavaizduoti naudojamas skaitinis failo aprašas.

  • Standartinis įvesties srautas (stdin): 0
  • Standartinis išvesties srautas (stdout): 1
  • Standartinis klaidų srautas (stderr): 2

Šiame įraše mes suprasime informaciją, kuri patenka į stdout ir stderr peradresavimą į failą.





Standartinė išvestis (stdout):

Kiekviena operacinė sistema, pagrįsta „Linux“, yra įsitikinusi, kad vykdoma komanda yra numatytoji vieta. Visi šią sąvoką vadina „stdout“ arba standartine išvestimi, kad būtų lengviau skambėti. „Bash“ arba „Zsh“ apvalkalas nuolat ieško numatytosios išvesties vietos. Kai apvalkalas aptinka naują išvestį, jis parodo jį terminalo ekrane, kad galėtumėte jį pamatyti. Priešingu atveju jis nusiųs išvestį į numatytąją vietą.



Standartinė klaida (stderr):

Standartinė klaida arba stderr yra panaši į standartinę įvestį ir išvestį, tačiau ji naudojama klaidų pranešimams saugoti. Standartinė klaida gali būti nukreipta į komandų eilutę arba failą naudojant terminalą. Jei norite įrašyti ar išsaugoti pranešimus atskirame žurnalo faile arba paslėpti klaidų pranešimus, jums padės peradresavimas stderr. Dabar pereikime prie praktinės stdout ir stderr peradresavimo pusės.



Stdout ir stderr peradresavimas į failą:

Kadangi peradresavimas yra būdas išgauti programos išvestį ir siųsti ją kaip įvestį į kitą komandą ar failą. Įvesties/išvesties srautus galima nukreipti įjungus operatorių n>, kur n yra failo aprašymo numeris. Norėdami peradresuoti stdout, naudojame 1>, o stderr atveju 2> pridedamas kaip operatorius.





Mes sukūrėme failą pavadinimu sample.txt, kad išsaugotume nukreiptą išvestį dabartiniame kataloge.



(Komanda> failas) laikomas klasikiniu peradresavimo operatoriumi, kuris tik nukreipia standartinę išvestį su standartine klaida, rodoma terminale. Mes parodysime įvairias galimybes taip pat nukreipti stderr.

Stderr ir stdout peradresavimas į atskirus failus:

Žemiau yra komandų sintaksė, skirta nukreipti stdout ir stderr į atskirus failus.

komandą >išeiti2>klaida

Žemiau pateikta komanda nukreipia išvestį į išvesties failą, o klaidų pranešimus-į klaidos failą.

$katėsample.txt>išeiti2>klaida

Stderr nukreipimas į stdout:

Įprasta praktika nukreipti stderr su standartine programos išvestimi, kad viskas būtų saugoma viename faile. Čia yra komandos sintaksė, skirta peradresuoti stderr į stdout:

komandą >išeiti2> &1$ls >samplefile.txt2> &1

$katėsamplefile.txt

> out redirects peradresuoja stdout į samplefile.txt, o 2> & 1 nukreipia stderr į dabartinę stdout vietą.

Jei stderr pirmiausia nukreipiamas į stdout, naudokite žemiau pateiktą komandą, kad nukreiptumėte stdout į failą.

komandą 2> &1 > failą$ls 2> &1 >samplefile.txt

$katėsamplefile.txt

&> taip pat naudojamas toms pačioms funkcijoms, kurias atlieka 2> & 1.

komandą &> failą$ls &>samplefile.txt

$katėsamplefile.txt

Stdout ir stderr peradresavimas į vieną failą:

Visi apvalkalai nepalaiko šios formos peradresavimo, tačiau bash ir Zsh palaiko. „Stdout“ ir „stderr“ galima peradresuoti naudojant šią sintaksę.

komandą &>išeiti$katėsample.txt&>išeiti

Būsimame straipsnio skyriuje apžvelgsime atskirą stdout ir stderr peradresavimo pavyzdį.

Stdout nukreipimas į failą:

Standartinė išvestis failų aprašų skaičių sąraše žymima 1. Peradresavimo komandai be jokio failo deskriptoriaus numerio terminalas nustatė reikšmę į 1. Sintaksė, skirta stdout nukreipti į failą, pateikiama taip:

komandą > failą

Mes naudojame pavyzdį.file, kad išsaugotume standartinę komandos ls -al išvestį

$ls >sample.txt

$katėsample.txt

komandą 1> failą$ls 1>sample.txt

$katėsample.txt

Stderr nukreipimas į failą:

Norėdami nukreipti stderr į failą, naudokite 2> operatorių.

komandą 2> failą $ls 2>sample.txt

„Stderr“ ir „stdout“ vykdymą galime sujungti vienoje peradresavimo komandoje.

komandą 2>error.txt1>output.txt

Žemiau pateiktame pavyzdyje klaidų pranešimai bus saugomi faile error.txt, kur output.txt turės standartinę ls komandos išvestį.

$ls 2>error.txt1>output.txt

$katėoutput.txt

Išvada:

Dirbant „Linux“ terminale labai naudinga turėti peradresavimo koncepciją ir failų aprašus I/O srautams. Šiame įraše mes kalbėjome apie įprastus įvesties/išvesties srautus, įskaitant stdout ir stderr. Pirmajame šio įrašo skyriuje pateikiama išsami informacija apie peradresavimą, įvesties/išvesties srautus ir skaitinio failo aprašą. Be to, jūs matėte praktinį įvairių stdout ir stderr peradresavimo formų pavyzdį.