Oggi, come promesso, vediamo un’altra comodissima caratteristica della shell di Linux: la concatenazione dei comandi, cioè le pipe.
Il punto di partenza
Abbiamo già visto l’uso del comando cat per ottenere il contenuto di un file di testo. Cat password.txt mi dà l’output del nostro caro vecchio file delle password (se non lo avete, lo creiamo nella puntata sulla redirezione):
cat password.txt
Concatenare due comandi
Se voglio che questo contenuto, cioè l’output di cat, venga dato in pasto a un altro comando, uso l’operatore pipe, il carattere |. Mettiamo di voler ordinare alfabeticamente le righe: serve sort, che legge l’input e restituisce le righe ordinate. L’input di sort deve diventare l’output di cat:
cat password.txt | sort
Ed ecco la magia: l’output di cat, filtrato da sort, adesso è ordinato alfabeticamente. Concatenare i comandi è semplicissimo.
Concatenare più comandi
Si possono concatenare anche più di due comandi. Se voglio solo le prime righe, in ordine alfabetico, del contenuto del file, aggiungo head, che con l’opzione -n prende le prime N righe. Quindi cat legge il file, sort lo ordina, e head prende le prime cinque righe:
cat password.txt | sort | head -n 5
Il risultato sono le prime cinque righe del file, in ordine alfabetico. (Nel video a voce dico “quattro”, ma il comando dice cinque: se ne volete quattro, scrivete head -n 4.)
Conclusione
La concatenazione si può complicare molto: è uno strumento potentissimo. Per ora abbiamo visto le basi con cat, sort e head, che ci serviranno per capire righe di comando molto più complesse. Nelle prossime puntate continueremo a usare le pipe per cose sempre più interessanti.
Link e risorse
- il video su YouTube
- esempi e comandi della puntata su GitHub
- pipe(7), pagina di manuale — come funzionano le pipe
- Pipeline (Unix) — in italiano
- bash(1), pagina di manuale — la sezione sulle pipeline
Sostieni il canale
PER SOSTENERE IL CANALE BASTANO UN LIKE E UN’ISCRIZIONE!
questi link sono affiliati Amazon, acquistando i libri che ti consiglio sostieni il canale!
