Riga di comando, piping e lezioni da imparare

Published:

This (possibly cringeworthy) article is very old and part of Project Necromancy. Many of the opinions I held back then have changed. I'm keeping this only for "historical" interest, not necessarily because I agree with what I thought back then.

Also consider that many of the included links (even the ones to the Internet Archive) are dead.

Una cosa che i sistemi Unix ci insegnano e che Windows ci fa, invece, troppo spesso dimenticare, è la versatilità della riga di comando.

Perché in Windows non proviamo l’impulso irrefrenabile, ogni tanto, di aprire il prompt di DOS, mentre farlo nei sistemi Unix ci da una così grande sensazione di potere?

Per il semplice fatto che i tool a riga di comando in Unix si basano tutti sulla filosofia del concatenamento. Ovvero, non sono pensati come delle unità a sé stanti, ma piuttosto come dei pezzi che cooperano tra loro.

Per fare ciò utilizzano, principalmente tre strumenti: il piping (concatenazione, di cui parleremo in questo articolo), la redirection (redirezione) e la substitution (sostituzione).

Il piping consiste nel prendere l’output di un programma e usarlo come input di un altro programma.

Mettiamo caso di voler vedere da shell i file presenti in una cartella in ordine alfabetico inverso. Per fare ciò utilizzeremo ls per ottenere l’elenco dei file presenti nella directory, e sort per ordinarli.

Proviamo per un attimo ad eseguire ls per conto suo.

blackmamba:Desktop klez$ ls
README         Senza titolo.rtf

Come si può notare, l’output del programma contiene solo le informazioni strettamente necessarie, senza nessun messaggio superfluo.

In DOS, invece, il comando DIR ci avrebbe mostrato un sacco di informazioni sì utili, ma non adatte ai nostri scopi, come ad esempio etichetta del volume, dimensione dei file etc.

Se poi proviamo ad eseguire sort per conto suo, ci renderemo conto che non ci mostra nessun messaggio. Nemmeno un prompt di input. Sta buono buono lì ad aspettare che l’utente scriva qualcosa sulla tastiera (o meglio, lo standard input).

Per questa ragione quando concateniamo i due comandi mandando l’output di ls all’input di sort (a cui aggiungiamo l’opzione -r per reverse, ovvero invertire l’ordine dei risultati) otteniamo solo ciò che volevamo, ovvero la nostra lista di file in ordine lessicografico inverso.

blackmamba:Desktop klez$ ls | sort -r
Senza titolo.rtf
README

Questo ci insegna che, a differenza di quello che potevamo farei a scuola (come il mitico prompt “Inserisci il primo numero:”), i tool da riga di comando non devono essere user-friendly (per così dire) ma devono poter essere usati in congiunzione con altri, come parti di un puzzle.

Ovviamente, possiamo sempre creare dei tool che mostrino di default informazioni utili agli utenti novizi. Ma sarebbe cosa buona dotarli di un qualche switch (per esempio un’opzione -q che sta per quiet) che elimini dall’output del programma tutte le informazioni inutili a un utente smaliziato o ad uno scripter.

Tutte cose che, purtroppo, Windows e DOS ci hanno fatto dimenticare.

Risorse utili

Permalink