File Descriptor of Shell Script

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:

Afișier text simplu.

Acum redirecționați conținutul acestui fișier către o altă locație:

Redirecționează conținutul fișierului.

Î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 timpul6082>A apărut o eroare în timpul procesului de redirecționare.

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

Redirecționați conținutul fișierului către o altă locație prinstdout.

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:

Redirecționați mesajul de eroare către o altă locație prin stderr.

Dacă doriți să redirecționați atât stdout cât și stderr către aceeași destinație, puteți face acest lucru

Redirecționează stderr la aceeași locație cu stdout.

.

  • &1 este utilizat ca referință la un descriptor de fișier cu id-ul 1, adică o referință la stdout.
  • 2>&1 înseamnă redirecționarea conținutului lui stderr către stdout.

.2867>Summary

  • Există de obicei două destinații pentru ieșire: stdout și stderr.
  • Potem direcționa ieșirea către diferite locuri, dar de obicei către un fișier.
  • Descriptorul de fișier poate fi utilizat pentru a face distincția între stdout (1) și stderr (2).
  • comanda >locație_de_ieșire este de fapt o abreviere a comenzii 1>locație_de_ieșire.
  • Putem folosi & pentru a ne referi la alți descriptori de fișiere.

Lasă un răspuns

Adresa ta de email nu va fi publicată.