Le Shell Pipes sono dei meccanismi di data i/o che permettono a piu' utilities di lavorare insieme.

Riflettono appieno il modello di problem solving modulare alla base di UNIX: compiti complessi possono essere portati a termine tramite la combinazione di piccoli programmi e utility.Queste utilities vengono 'collegate' da pipes che permettono l'interscambio di dati tra i vari programmi.

Ecco alcuni esempi di Shell Pipes:

Il Pipe ">"

Redireziona l'output su un file. L'utilizzo classico e':

$ comando arg1 arg2 ... > file_name

Se il file file_name esiste, quello esistente viene sovrascritto con il nuovo contenuto restituito dal comando.Se file_name non esiste, il file viene creato.

L'esempio seguente salva il risultato del comando ls -l nel file lista.txt

ls -l > contents.txt

Il Pipe ">>" e' simile al ">", anche in questo caso l'output viene indirizzato in un file.In questo caso pero' se il file esiste gia' il risultato viene aggiunto in coda al file medesimo.

In questo esempio immagazziniamo nel file linee.txt tutte le righe presenti nel file prog.c contenenti le parole long o char:

$ grep "long" prog.c > linee.txt$ grep "char" prog.c >> linee.txt

Il Pipe "

Preleva i dati da un file specifico e li utilizza come input per il comando specificato:

$ comando arg1 arg2 ...

Naturalmente questa volta file_name deve esistere!

Riprendendo l'esempio precedente:

$ grep "long"

Restituisce lo stesso risultato di grep "long" prog.c

Il Pipe "|"

Reindirizza l'output di un programma (stdout) nell'input (stdin) di un'altro programma.E' possibile quindi connettere 2 o piu' programmi utilizzando il pipe "|" tra i comandi che li richiamano.

$ comando-1 args | comando-2 args

Nell'esempio sopra l'output (stdout) del comando-1 viene reindirizzato nell'input (stdin) del comando-2.Un esempio pratico potrebbe essere la ricerca nel numero di righe che in un file contengono una particolare parola, utilizzando il pipe "|" con i comandi grep e wc:

$ grep "bash" test.txt | wc -l

L'esempio restituisce il numero di linee che contengono la parola "bash" nel file test.txt. In pratica il pipe invia il risultato del comando grep (tutte le righe del file contenenti la parola bash) in input al comando wc -l che si occupa di contare il numero delle righe ricevute.

La stessa operazioni puo' essere eseguita utilizzando i pipes gia' citati ">" e ">":

$ grep "bash" test.txt > the_lines.txt$ wc -l

L'output del grep viene salvato nel file the_lines.txt utilizzando il pipe ">". Lo stesso file viene poi processato da wc -l , che lo riceve in input dal pipe ".