Jednotlivé filtre sú často užitočné aj samé osebe, ich skutočná sila ale spočíva v tom, že interpreter príkazového riadku umožňuje paralelné spúšťanie viacerých procesov a postupné zreťazenie ich štandardných vstupov a výstupov. Takýmto spôsobom je možné podľa potreby kombinovať relatívne jednoduché filtre, ktoré "robia jednu vec dobre", do komplexných algoritmov:
Napríklad:
prikaz_1 [p_1...] | prikaz_2 [p_2...] | prikaz_3 [p_3...] | ... | prikaz_n [p_n...]
Spustí súčasne príkazy prikaz_1
až prikaz_n
(s prípadnými parametrami) v paralelne bežiacich procesoch a presmeruje
štandardný
výstup procesu, v ktorom sa vykonáva prikaz_1
do štandardného vstupu procesu, v ktorom sa vykonáva prikaz_2
jeho štandardný výstup na vstup procesu, kde sa vykonáva prikaz_3
,
atď. až po posledný proces. Takéto zreťazenie procesov sa nazýva
pipeline.
Pipeline je vlastne ad-hoc filter, majúci svoj štandardný vstup a výstup, a transformácia, ktorú vykonáva je kombináciou operácií, implementovaných jednotlivými filtrami.
Cvičenie
Nasledovný príkaz je príkladom pipelinu troch procesov,
ls -l /
vypíše zoznam položiek v koreňovom adresári na samostatné riadky,grep -e '^d'
z nich vyberie tie riadky, ktoré začínajú znakomd
- t.j. adresáre acat -n
ich očísluje.
$> ls -l / | grep -e '^d' | cat -n
Štandardný vstup a výstup pipelinu je možné presmerovať z a do súboru nasledovne:
prikaz_1 [p_1...] < vstup | prikaz_2 [p_2...] | ... | prikaz_n [p_n...] > vystup