Intro
Cîteodată vedem comenzi ca aceasta în shell:
- $ ls foo > /dev/null 2>&1
S-ar putea să fie dificil de înțeles ce face acest lucru pentru prima dată, așa că această notă o va explica pe scurt.
Redirecționare I/O
Să presupunem că aveți acum un simplu fișier text:
Acum redirecționați conținutul acestui fișier către o altă locație:
În acțiunea de redirecționare de mai sus, nu vedem nicio ieșire afișată pe terminal, deoarece comanda > redirecționează conținutul fișierului test.txt cătreoutput.txt, care este o ieșire standard (stdout).
În contrast cu ieșirea standard, există eroarea standard (stdr), de exemplu
A apărut o eroare în timpul procesului de redirecționare deoarece nu există niciun fișier cu numele no_such_file.txt în directorul de mai jos. În acest caz, chiar dacă se utilizează comanda >, nu este posibil să se introducă conținutul în output.txt, deoarece nu există stdout, ci un mesaj de eroare stderror.
Descriptor de fișier
Descriptorul de fișier poate fi considerat un număr întreg pozitiv pentru un fișier deschis. Dacă aveți 100 de fișiere deschise, aveți practic 100 de descriptori de fișiere corespunzători.
În sistemele Unix/Unix-like, există, de asemenea, descriptori de fișiere dedicați lui stdout și stderr, care, ca să fie clar, au destinații dedicate pentru ieșirea acestorpentru aceste destinații de ieșire:
- 1: pentru stdout
- 2: pentru stderr
Punând totul laolaltă
Conform conceptului de mai sus, dacă doriți să scrieți conținutul unui fișier cunoscut într-un alt fișier, puteți face acest lucru
1 din această parte reprezintă stdout, a cărui sintaxă este reprezentată ca:
- >
Deci, când vedeți pe cineva scriind de la.foo > la.bar, nu face decât să ocolească
În mod similar, pentru a redirecționa stderr puteți face acest lucru: