Redirecționați stdout și stderr către Fișier

Redirect Stdout Stderr File



Când redirecționați orice ieșire de comandă către un fișier, veți observa că mesajele de eroare sunt tipărite pe fereastra terminalului. Orice comandă executată în orice shell Linux, cum ar fi bash, utilizează trei fluxuri I / O obișnuite. Pentru a reprezenta fiecare flux este utilizat un descriptor numeric de fișiere.

  • Fluxul standard de intrare (stdin): 0
  • Fluxul de ieșire standard (stdout): 1
  • Fluxul de erori standard (stderr): 2

În acest post, vom înțelege informațiile care intră sub redirecționarea stdout și stderr către fișier.







Iesire standard (stdout):

Fiecare sistem de operare bazat pe Linux are convingerea unui loc implicit pentru comanda executată. Toată lumea se referă la această noțiune ca stdout sau ieșire standard pentru a o face să sune mai ușor. Shell-ul dvs. Bash sau Zsh caută în mod constant locația de ieșire implicită. Când shell-ul detectează o ieșire nouă, acesta îl afișează pe ecranul terminalului pentru a-l vedea. În caz contrar, va trimite ieșirea la locația sa implicită.



Eroare standard (stderr):

Eroarea standard sau stderr este similară cu intrarea și ieșirea standard, dar este utilizată pentru stocarea mesajelor de eroare. Eroarea standard poate fi redirecționată către linia de comandă sau un fișier folosind un terminal. Dacă doriți să înregistrați sau să stocați mesaje într-un fișier jurnal separat sau să ascundeți mesajele de eroare, redirecționarea stderr vă va ajuta. Acum să ne îndreptăm spre partea practică a redirecționării stdout și stderr.



Redirecționarea stdout și stderr către un fișier:

Deoarece redirecționarea este o metodă de captare a unui program de ieșire și trimiterea acestuia ca intrare către o altă comandă sau fișier. Fluxurile I / O pot fi redirecționate prin punerea în funcțiune a operatorului n>, unde n este numărul descriptorului de fișier. Pentru redirecționarea stdout, folosim 1> iar pentru stderr, 2> este adăugat ca operator.





Am creat un fișier numit sample.txt pentru a stoca rezultatul redirecționat în directorul nostru curent.



(Comandă> fișier) este considerat ca operatorul de redirecționare clasic care redirecționează numai ieșirea standard cu eroarea standard afișată în terminal. Vom demonstra diferite opțiuni pentru a redirecționa și stderr.

Redirecționarea stderr și stdout către fișiere separate:

Mai jos este sintaxa comenzii pentru redirecționarea stdout și stderr către fișiere separate.

comanda >afară2>eroare

Comanda dată mai jos va redirecționa ieșirea către fișierul out și mesajele de eroare către fișierul de eroare.

$pisicăsample.txt>afară2>eroare

Redirecționarea stderr la stdout:

Este o practică obișnuită să redirecționați stderr cu ieșirea standard a unui program pentru a stoca totul într-un singur fișier. Iată sintaxa comenzii pentru redirecționarea stderr către stdout:

comanda >afară2> &1$eu sunt >samplefile.txt2> &1

$pisicăsamplefile.txt

> redirecționările out redirecționează stdout către samplefile.txt, iar 2> & 1 va redirecționa stderr către locația curentă a stdout.

Dacă stderr este redirecționat mai întâi către stdout, utilizați comanda dată mai jos pentru a redirecționa stdout către un fișier.

comanda 2> &1 > fişier$eu sunt -la 2> &1 >samplefile.txt

$pisicăsamplefile.txt

&> este, de asemenea, utilizat pentru aceeași funcționalitate pe care o realizează 2> & 1.

comanda &> fişier$eu sunt &>samplefile.txt

$pisicăsamplefile.txt

Redirecționarea stdout și stderr către un singur fișier:

Toate shell-urile nu acceptă redirecționarea acestui formular, dar bash și Zsh o susțin. Stdout și stderr pot fi redirecționate utilizând următoarea sintaxă.

comanda &>afară$pisicăsample.txt&>afară

În următoarea secțiune a articolului, vom verifica exemplul separat pentru redirecționarea stdout și stderr.

Redirecționarea stdout către un fișier:

Ieșirea standard este reprezentată de 1 în lista numerelor descriptorului de fișiere. Pentru comanda de redirecționare fără nici un număr de descriptor de fișier, terminalul își setează valoarea la 1. Sintaxa pentru redirecționarea stdout-ului către un fișier este dată după cum urmează:

comanda > fişier

Folosim sample.file pentru stocarea ieșirii standard a comenzii ls -al

$eu sunt -la >sample.txt

$pisicăsample.txt

comanda 1> fişier$eu sunt 1>sample.txt

$pisicăsample.txt

Redirecționarea stderr către un fișier:

Utilizați operatorul 2> pentru redirecționarea stderr-ului către un fișier.

comanda 2> fişier $eu sunt -la 2>sample.txt

Putem combina execuția pentru stderr și stdout într-o singură comandă de redirecționare.

comanda 2>error.txt1>output.txt

În exemplul de mai jos, mesajele de eroare vor fi stocate în error.txt, unde output.txt va avea ieșirea standard a comenzii ls.

$eu sunt 2>error.txt1>output.txt

$pisicăoutput.txt

Concluzie:

Având conceptul de redirecționare și descriptori de fișiere pentru fluxuri I / O este foarte valoros în timp ce lucrați într-un terminal Linux. În această postare, am vorbit despre fluxurile obișnuite de I / O, inclusiv stdout și stderr. Prima secțiune a acestei postări vă oferă informații detaliate despre redirecționare, fluxuri I / O și descriptorul fișierului numeric. Apoi, ați văzut exemplul practic pentru diverse forme de redirecționare stdout și stderr.