A csővezeték (pipe)

Az előző példában az egyik program kimenetét használta fel a másik program bemenetként, egy ideiglenes állomány közbeiktatásával. Ennek és az ehhez hasonló feladatoknak a megoldására szolgál a csővezeték (pipe), amely annakidején a UNIX egyik alapvető újítása volt. A pipe, melynek jele a '|' karakter, az egyik program kimenetét a másik program bemenetével köti össze. Az előző példaprogram tehát így írható:

 

$ who | sort

guest vt01 Mar 28 20:58

guest vt02 Mar 28 20:58

root console Mar 28 20:58

$

(Noha a pipe a DOS alatt is szerepel, de ott csak szimulálja a parancsértelmező a cső jellegű működést, az átadandó adatok egy, a felhasználó előtt rejtett fájlba kerülnek. Ennek az a következménye, hogy a második program csak akkor tud olvasni a “pipe”-ról, ha az első már befejezte annak írását. A UNIX esetében a pipe-olást egy FIFO oldja meg, amit váltakozva az első program tölt, a második kiolvas, és ez addig folytatódik, amíg az első programnak van mit tölteni.)

A pipe-ok többszörözhetőek is, azaz láncszerűen egymásra épülve adhatják tovább az adatokat egymásnak. Nézzük meg például az alábbi programot:

 

$ who | sort | pr -t -3

guest vt01 guest vt02 root console

$

Ez a parancs először kilistázza a bejelentkezett felhasználókat, majd ábécésorrendbe rendezi őket, végül az utolsó fázisban háromhasábos formában nyomtatja ki őket.

A következő parancs azt adja meg, hogy a guest nevű felhasználó hány terminálon van bejelentkezve:

 

$ who | grep guest | wc -l

2

$

E feladathoz két, eddig még nem említett hasznos UNIX segédprogramot használtunk fel. A grep karaktersorozatoknak, stringeknek állományokban történő keresésére szolgál, a wc (word count) pedig alapértelmezés szerint a bemenet sorainak, szavainak és karaktereinek számát adja meg. A -l opció megadásával csak a sorok számát írja ki.

Nem utolsósorban a pipe-ban való használhatóság követelménye miatt olyan a legtöbb UNIX parancs viselkedése, hogy ha nincs állománynév megadva, ahonnan inputját vennie kell, akkor automatikusan a standard inputról olvas. (Számos programnál lehetőség van arra, hogy a standard inputról való olvasást explicit módon jelezzük, hagyományosan egy önmagában, opcióbetű nélkül álló — jellel.)

Tartalomjegyzék