Presmerujte výstup a stderr do súboru

Redirect Stdout Stderr File



Keď presmerujete akýkoľvek výstup príkazu do súboru, všimnete si, že chybové hlásenia sa vytlačia v okne terminálu. Akýkoľvek príkaz vykonaný v akomkoľvek prostredí Linux, ako napríklad bash, využíva tri bežné vstupno -výstupné toky. Každý prúd je reprezentovaný numerickým deskriptorom súboru.

  • Štandardný vstupný tok (štandardný): 0
  • Štandardný výstupný tok (výstup): 1
  • Štandardný tok chýb (stderr): 2

V tomto príspevku pochopíme informácie, ktoré spadajú pod presmerovanie stdout a stderr do súboru.







Štandardný výkon (výstup):

Každý operačný systém založený na Linuxe má presvedčenie o predvolenom mieste pre vykonaný príkaz. Každý používa tento pojem ako štandardný alebo štandardný výstup, aby znel jednoduchšie. Váš shell Bash alebo Zsh neustále hľadá predvolené umiestnenie výstupu. Keď shell zistí nový výstup, zobrazí ho na obrazovke terminálu, aby ste ho videli. V opačnom prípade pošle výstup na svoje predvolené umiestnenie.



Štandardná chyba (stderr):

Štandardná chyba alebo stderr je podobná štandardnému vstupu a výstupu, ale používa sa na ukladanie chybových správ. Štandardnú chybu je možné presmerovať na príkazový riadok alebo do súboru pomocou terminálu. Ak chcete zaznamenávať alebo ukladať správy do samostatného súboru denníka alebo skryť chybové správy, presmerovanie stderr vám pomôže. Prejdime teraz k praktickej stránke presmerovania stdout a stderr.



Presmerovanie stdout a stderr do súboru:

Presmerovanie je metóda zachytenia výstupu programu a jeho odoslania ako vstupu do iného príkazu alebo súboru. I/O toky je možné presmerovať tak, že sa použije operátor n>, kde n je číslo deskriptora súboru. Na presmerovanie štandardného výstupu použijeme 1> a pre stderr sa ako operátor pridá 2>.





Vytvorili sme súbor s názvom sample.txt na uloženie presmerovaného výstupu do nášho aktuálneho adresára.



(Príkaz> súbor) je považovaný za klasický operátor presmerovania, ktorý presmeruje iba štandardný výstup so štandardnou chybou zobrazenou v termináli. Ukážeme rôzne možnosti presmerovania stderr.

Presmerovanie stderr a stdout na oddelené súbory:

Nasleduje syntax príkazu na presmerovanie stdout a stderr na oddelené súbory.

príkaz >von2>chyba

Nasledujúci príkaz presmeruje výstup do výstupného súboru a chybové správy do súboru chýb.

$katsample.txt>von2>chyba

Presmerovanie stderr na štandardný výstup:

Je bežnou praxou presmerovať stderr na štandardný výstup programu, aby sa všetko uložilo do jedného súboru. Tu je syntax príkazu na presmerovanie stderr na stdout:

príkaz >von2> &1$ls >samplefile.txt2> &1

$katsamplefile.txt

> out presmeruje presmerovanie stdout na samplefile.txt a 2> & 1 presmeruje stderr na aktuálne umiestnenie stdout.

Ak je stderr najskôr presmerovaný na výstup stdout, použite nižšie uvedený príkaz na presmerovanie výstupu na súbor.

príkaz 2> &1 > súbor$ls -do 2> &1 >samplefile.txt

$katsamplefile.txt

&> sa používa aj pre rovnakú funkciu, akú vykonáva 2> & 1.

príkaz &> súbor$ls &>samplefile.txt

$katsamplefile.txt

Presmerovanie stdout a stderr do jedného súboru:

Všetky mušle nepodporujú toto presmerovanie formulárov, ale bash a Zsh to podporujú. Výstupy a stderr je možné presmerovať pomocou nasledujúcej syntaxe.

príkaz &>von$katsample.txt&>von

V nasledujúcej časti článku sa pozrieme na samostatný príklad presmerovania stdout a stderr.

Presmerovanie výstupu do súboru:

Štandardný výstup je reprezentovaný číslom 1 v zozname čísel deskriptorov súborov. Pre príkaz presmerovania bez čísla deskriptora súboru nastavil terminál jeho hodnotu na 1. Syntax presmerovania výstupného výstupu do súboru je daná nasledovne:

príkaz > súbor

Na uloženie štandardného výstupu príkazu ls -al používame súbor sample.file

$ls -do >sample.txt

$katsample.txt

príkaz 1> súbor$ls 1>sample.txt

$katsample.txt

Presmerovanie stderr do súboru:

Na presmerovanie súboru stderr do súboru použite operátor 2>.

príkaz 2> súbor $ls -do 2>sample.txt

Vykonanie pre stderr a stdout môžeme skombinovať do jedného príkazu presmerovania.

príkaz 2>error.txt1>output.txt

V nižšie uvedenom príklade budú chybové správy uložené v súbore error.txt, kde výstup.txt bude mať štandardný výstup príkazu ls.

$ls 2>error.txt1>output.txt

$katoutput.txt

Záver:

Pri práci v termináli Linux je veľmi cenné mať koncept presmerovania a deskriptorov súborov pre vstupno -výstupné toky. V tomto príspevku sme hovorili o bežných I/O prúdoch, vrátane stdout a stderr. Prvá časť tohto príspevku vám prináša podrobné informácie o presmerovaní, prúdoch I/O a číselnom deskriptore súboru. Ďalej ste videli praktický príklad rôznych foriem presmerovania stdout a stderr.