Soluzione: le pipe
Molti comandi UNIX producono una grande quantità di informazioni: per esempio, non è strano per un comando come ls
/usr/bin produrre più output di quello che potete vedere su una sola schermata. Per riuscire a vedere tutte le informazioni
di un comando come ls /usr/bin , è necessario usare un altro comando Unix, chiamato more (Si chiama
more perché il prompt che stampava originariamente era -more- . In molte versioni di Linux, il comando
more è identico ad un comando più avanzato che fa tutto quello che fa more e molto di più.
Come prova che i programmatori non hanno il senso dell'umorismo, l'hanno chiamato less !). more si ferma ad
ogni videata di informazioni. Per esempio, more < /etc/rc mostra il file /etc/rc , esattamente come farebbe
cat /etc/rc , eccetto che vi permette di leggerlo. more permette anche la forma more /etc/rc ,
ed è questo il modo normale di invocarlo.
Comunque, questo non risolve il problema che ls /usr/bin mostra più informazioni di quelle che potete vedere. more
< ls /usr/bin non funziona, la redirezione dell'input funziona solamente con i file, non con i comandi! Potreste fare questo:
/home/larry$ ls /usr/bin > temp-ls
/home/larry$ more temp-ls
...
/home/larry$ rm temp-ls
UNIX dà un modo più pulito per fare la stessa cosa: si usa il comando ls /usr/bin | more . Il carattere "|"
indica una pipe (conduttura). Come una conduttura dell'acqua, una pipe UNIX controlla il flusso. Invece di acqua, stiamo controllando
il flusso di informazioni!
Uno strumento utile con le pipe sono i programmi chiamati filtri. Un filtro è un programma che legge lo standard input,
lo elabora in qualche modo e manda i risultati sullo standard output. more è un filtro: legge i dati che provengono
dallo standard input e li visualizza sullo standard output una videata alla volta, permettendovi di leggere il file. more
non è un granché come filtro, dato che il suo output non può essere usato come input per un altro programma.
Altri filtri sono i programmi cat , sort , head e tail . Per esempio, se volete
leggere solo le prime dieci linee dell'output di ls , potete usare ls /usr/bin | head .
|