Redirecționare I/O

Redirecționarea I/O  este capacitatea shell-ului de comandă al unor sisteme de operare de a redirecționa fluxurile standard către o locație definită de utilizator, cum ar fi un fișier. Caracteristic pentru sistemele de operare asemănătoare Unix , dar implementat în diferite grade în sistemele de operare ale altor familii.

Redirecționarea fluxurilor de intrare standard de ieșire

Redirecționarea se face de obicei prin introducerea caracterului special > între comenzi.
De obicei , sintaxa arată astfel: comandă1 > fișier1 - execută comanda1 , punând ieșirea standard în fișierul 1 ; command1 < file1 execută comanda1 folosind fișierul1 ca intrare (în loc de tastatură ). Pentru fiecare cerere de introducere, programul citește o linie de text din fișier. Comanda de construcție1 < fișier1 > fișier2 combină cele două opțiuni anterioare: execută intrarea comenzii1 din fișier1 și ieșire în fișier2 .

Transportoare

Conductele  sunt capacitatea mai multor programe de a lucra împreună, atunci când ieșirea unui program merge direct la intrarea altuia fără a utiliza fișiere temporare intermediare . Sintaxă: comandă1 | command2 execută comanda1 utilizând ieșirea sa ca intrare atunci când comanda2 este executată , ceea ce este același cu utilizarea a două redirecționări și a unui fișier temporar:

comandă1 > fișier temporar comanda2 < TempFile rm TempFile

Un bun exemplu de conducte de comandă este combinarea echo cu o altă comandă pentru a obține interactivitate în medii non-interactive, de exemplu:

echo -e „Nume utilizator\nParolă” | ftp localhost

Aceasta pornește un client ftp care se conectează la gazda locală ( localhost ). La cererea programului, acesta introduce prima linie Nume utilizator , apoi la următoarea cerere de introducere se citește linia Parolă . Liniile din comanda echo sunt separate prin \n .

Redirecționare de la descriptori de fișiere standard

În shell-ul Unix derivat din shell Bourne , cei doi pași anteriori pot fi îmbunătățiți prin adăugarea unui număr ( descriptor de fișier ) imediat înainte de caracterul de redirecționare. Acest număr specifică ce flux este utilizat pentru redirecționare. Unix are următoarele fluxuri standard de intrare/ieșire:

Descriptor Nume Descriere
0 stdin intrare standard
unu stdout ieșire standard
2 stderr Ieșire eroare standard

De exemplu: comandă1 2> fișier1 execută comanda1 , trimițând eroarea standard către fișier1 .

În shell-urile derivate din C Shell , sintaxa pentru specificarea fluxului către care să redirecționeze este de a adăuga un caracter & după caracterul de redirecționare.

Adesea, fluxul de erori standard este combinat cu fluxul de ieșire standard, astfel încât erorile și ieșirea normală a programului pot fi procesate împreună. De exemplu:

find / -name .profile > results.txt 2>&1

va încerca să găsească toate fișierele numite .profile . Dacă este rulată fără redirecționări, această comandă va trimite rezultatele căutării către stdout și mesaje de eroare (cum ar fi permisiuni insuficiente atunci când încercați să căutați în directoare protejate) către stderr . În mod implicit, aceste roluri sunt ocupate de consolă. Dacă rezultatul standard este direcționat către results.txt , erorile vor fi în continuare trimise către consolă. Pentru ca atât erorile, cât și rezultatele căutării să fie trimise la results.txt , fluxurile standard de eroare și de ieșire au fost combinate folosind 2>&1 .

Scrierea 2>&1 înainte de > nu va funcționa, deoarece atunci când interpretul citește 2>&1 , nu știe unde este redirecționată ieșirea standard, astfel încât fluxurile de eroare și de ieșire nu vor fi îmbinate.

Dacă rezultatul combinat urmează să fie transmis către intrarea altui program, atunci secvența 2>&1 trebuie să precedă semnul pipeline | . De exemplu:

găsi / -nume .profil 2>&1 | mai putin .

O formă simplificată a comenzii: comandă > fișier 2>&1 arată astfel: comandă &> fișier sau comandă >& fișier

Lanț transportor

Comenzile de redirecționare și pipelining pot fi înlănțuite pentru a produce comenzi mai complexe, cum ar fi:

ls | grep '.sh' | sortare > shlist

primește o listă a conținutului directorului curent, care este filtrată pentru a lăsa doar liniile care conțin „.sh” , apoi această listă filtrată este sortată lexical și rezultatul final este plasat în fișierul shlist . Aceste tipuri de constructe se găsesc adesea în scripturile shell.

Redirecționarea către mai multe ieșiri

Comanda standard tee poate redirecționa ieșirea unei comenzi în mai multe locuri în același timp. Exemplu:

ls -lrt | dosar tee1

direcționează rezultatul standard al comenzii ls -lrt (lista de fișiere) atât către consolă, cât și către fișier1 .

Redirecționează cu

În shell -ul Bash , puteți redirecționa către un fișier atașat la sfârșit. În acest caz, informațiile stocate în fișier nu vor fi șterse, dar toate informațiile noi vor fi adăugate la sfârșitul acestui fișier. Sintaxă: comandă1 >> fișier1

Document încorporat

Unele shell-uri și chiar limbaje de aplicație de nivel înalt ( PHP , Perl ), permit sintaxei documentului inline (vezi sintaxa Heredoc ) să direcționeze intrarea din fișierul de program în sine, de exemplu către ieșirea standard:

pisica<<'EOF' Textul arbitrar este plasat aici, inclusiv – inclusiv caractere speciale EOF

Sau la un fișier atașat la sfârșit:

fisier cat<<'EOF'>> Textul arbitrar este plasat aici, inclusiv – inclusiv caractere speciale EOF

Semnătura finală a sfârșitului unui document încorporat EOF (poate fi utilizată o valoare arbitrară, dar este adesea folosită EOF  - conform sensului) trebuie să înceapă la începutul rândului.

Link -uri