Intrare, ieșire și transportor

Stdin și stdout

Standardul I / O fluxuri sunt destinate în primul rând pentru schimbul de informații text. Aici nu contează care comunică prin text: un om cu un program sau programe pentru fiecare alte - principalul lucru pe care ei au un canal de date, și așa au spus, „aceeași limbă“.







Atunci când se lucrează cu linia de comandă, intrarea standard a carcasei este conectat la tastatura și de ieșire și de ieșire de eroare standard, - de pe ecranul monitorului (sau fereastra de emulator de terminal). Să ne arate un exemplu pentru comenzi simple - cat. De obicei, comanda cat citește date de la toate fișierele care sunt listate ca parametrii săi, și trimite de citire direct la ieșirea standard (stdout). Prin urmare, comanda

afișează conținutul primului fișier de istorie-finala. și apoi - fișier de masterat-teză.

Cu toate acestea, în cazul în care numele de fișier nu este specificat, program de pisica citește de intrare de la stdin și le-a reveni imediat la stdout (nu schimbă). Acestea trec prin pisica. atât prin conductă. Iată un exemplu:

Fiecare linie a intrat de la tastatură, program de pisica revine imediat pe ecran. La introducerea informațiilor de la capătul de intrare standard de introducere a textului este semnalat printr-o combinație specială de chei, de obicei Ctrl - D.

Să ne dea un alt exemplu. comanda sortare citește șirul de text de intrare (de asemenea, de la stdin, dacă nu este indicat nici un nume de fișier), și produce un set de aceste linii într-un mod ordonat la stdout. Verificăm efectul.

După cum se poate observa, după apăsarea Ctrl - D. șir de sortare a condus sortate în ordine alfabetică.

Redirecționarea de intrare și de ieșire

Să presupunem că doriți să trimiteți ieșirea de sortare într-un fișier, pentru a salva o listă alfabetică a discului. Shell-ul vă permite să redirecționați ieșirea standard, într-un fișier folosind simbolul>. Iată un exemplu:

Se poate observa că rezultatul comenzii de sortare nu este afișată, cu toate acestea, este stocat într-un fișier de cumpărături listă de nume. Afișează conținutul acestui fișier:

Cu toate acestea, puteți face în caz contrar, nu numai că redirecționarea de ieșire standard și standard de intrare dintr-un fișier de utilitate folosind acest simbol <.

Rezultatul comenzii de sortare





Noi introducem conceptul de filtru. Filtrul este un program care citește de la intrarea standard, le procesează într-un fel, și trimite rezultatul la iesirea standard. Atunci când se utilizează redirecționare, intrare și ieșire standard de fișiere pot acționa. După cum sa menționat mai sus, în mod implicit, consultați stdin și stdout la tastatura și ecranul respectiv. sortare este un program de filtru simplu - sortează datele de intrare și trimite rezultatul la iesirea standard. Filtru Foarte simplu este un program de pisica - nu face nimic pentru datele de intrare, ci pur și simplu le transmite la ieșire.

Folosind comenzi stivuite (transportor)

Am demonstrat deja cum să folosească un fel ca un program de filtrare. În aceste exemple, sa presupus că datele inițiale sunt stocate într-un fișier sau că datele inițiale sunt introduse de la tastatura (stdin). Dar ce se întâmplă dacă doriți să sortați datele care sunt rezultatul unor alte echipe, de exemplu, ls?

Să sortați datele în ordine alfabetică inversă; Această opțiune este comanda de sortare -r. Dacă doriți să listați fișierele din directorul curent în ordine alfabetică inversă, o modalitate de a face acest lucru ar fi așa. Mai întâi aplicăm comanda ls:

Acum redirecționați ieșirea comenzii ls într-un fișier numit fișier-list

Aici, ieșirea comenzii ls este salvat într-un fișier și apoi fișierul a fost procesat comanda de sortare -r. Dar această metodă este greoi și necesită utilizarea unui fișier temporar pentru a stoca de ieșire a datelor programului ls.

Decizia de creare a echipelor unite pot fi în această situație (conducte). Dock oferă o comandă shell care stdout din prima comandă direcționează către stdin a doua comandă. În acest caz, vrem să trimită stdout ls la comanda de sortare stdin. | Simbol este utilizat pentru andocare. așa cum se arată în exemplul următor:

Această comandă este mai scurt decât un set de comenzi, și este mai ușor de tip.

Luați în considerare un alt exemplu util. echipă

Acesta oferă o listă lungă de fișiere. Cele mai multe din această listă este de zbor pe ecran prea repede pentru conținutul acestei liste pot fi citite. Încercați să utilizați mai comandă pentru a afișa lista de piese:

Acum, acest lucru poate „răsturna“ listă.

Puteți merge mai departe și andoca mai mult de două echipe. Luați în considerare capul echipei. care este un filtru de următoarele proprietăți: afișează prima linie de intrare (în acest caz, ieșirea de intrare vor fi furnizate de la mai multe comenzi stivuite). Dacă vrem să afișeze ultimul nume de fișier în ordine alfabetică, în directorul curent, puteți utiliza următoarea comandă lung:

în cazul în care capul de comandă -1 afișează prima linie a șirurile de intrare primite de acesta (în acest caz, constă dintr-un flux de date de la comanda ls), sortate în ordine alfabetică inversă.

redirecționare non-distructive

Efectul folosirii simbolului> pentru a redirecționa fișierul de ieșire este distructiv; Cu alte cuvinte, echipa

distruge fișierul listă conținutul fișierelor. Dacă fișierul a existat anterior, iar în locul său a crea un nou fișier. Dacă, în schimb redirecționarea se va face cu ajutorul simbolurilor >>. de ieșire este atribuit la sfârșitul fișierului, conținutul fișierului original nu va fi distrus. De exemplu, comanda

atribuie la încheierea comenzii ls la sfârșitul fișierului file-listă.

Trebuie avut în vedere faptul că redirecționează de intrare și de ieșire, precum și echipele stykovanie au efectuat o comandă shell care acceptă utilizarea simbolurilor> și >>. |. Comenzile în sine nu sunt capabili să perceapă și să interpreteze aceste simboluri.