Cos’è la Bourne Shell?

La Bourne Shell è un piccolo programma che gira su sistemi operativi Unix® e LINUX® e fornisce un’interfaccia per eseguire programmi sul sistema. Viene spesso definita interfaccia della riga di comando o interprete di comandi, poiché non fornisce all’utente un’interfaccia utente grafica (GUI). I comandi e tutti i parametri necessari da eseguire vengono digitati nella shell. La Bourne Shell è anche un linguaggio di scripting, che consente agli utenti di creare ed eseguire file di script in grado di elaborare i dati attraverso più programmi tramite un singolo comando. Sui sistemi simili a Unix®, il programma è semplicemente noto come “sh”.

Le prime shell di questo tipo per i sistemi Unix® erano conosciute come la shell Thompson, creata da Ken Thompson, uno dei creatori originali del sistema operativo Unix®. La shell Thompson era limitata all’interpretazione dei comandi e una serie di funzioni aggiuntive doveva essere eseguita come operazioni esterne. Successivamente, Stephen Bourne ha creato la shell Bourne per sostituire la shell Thompson, aggiungendo una serie di nuove funzionalità nella shell stessa, nonché il linguaggio di scripting della shell.

In realtà, la Bourne Shell è stata progettata come linguaggio di scripting fin dall’inizio. Sebbene fosse ancora l’interfaccia a riga di comando per Unix® versione sette, apriva anche la possibilità agli utenti di sviluppare script di shell che collegassero i comandi insieme per elaborare i dati. Attraverso l’uso di questa programmazione, l’utente potrebbe stabilire variabili per acquisire dati noti o sconosciuti da input o output e manipolare l’elaborazione di tali dati attraverso l’uso di istruzioni condizionali nello script tramite una tecnica denominata flusso di controllo.

Questa è stata anche la prima shell a implementare una funzionalità nota come gestione del segnale. Attraverso la Bourne Shell, un utente può inviare un tipo specifico di segnale a un processo già in esecuzione sul computer, istruendo quel processo a fare qualcos’altro. Molti di questi sono modi per interrompere un processo in esecuzione e produrre una sorta di output che può essere utilizzato per il debug, sebbene ne esistano altri per arrestare temporaneamente un processo, riprenderlo e così via.

La capacità di controllare direttamente i descrittori di file è stata un’altra novità assoluta per la shell Bourne. Su un sistema simile a Unix®, ogni programma in esecuzione ha una tabella che elenca i descrittori di file per qualsiasi file aperto. Questo può includere qualsiasi cosa, da un semplice file di testo a una directory o persino i socket di comunicazione che i processi utilizzano per condividere i dati tra loro. Per un utente avere il controllo sui descrittori di file su un sistema ha consentito un controllo senza precedenti su input e output per praticamente tutto sul computer.

Naturalmente, anche se la shell Bourne offriva agli utenti tale funzionalità aggiuntiva, mancava di funzionalità come la capacità di controllare i processi in modo interattivo, stabilire alias di comando e conservare una cronologia. In seguito, tuttavia, iniziarono a emergere un certo numero di discendenti che presero le funzionalità di shell più utili che erano state concepite nel corso degli anni e le arrotolarono in nuove shell. Un esempio comune è la shell Bourne-again, o Bash, comune su molti sistemi LINUX®. Di conseguenza, molti di questi discendenti sono pienamente in grado di eseguire normali script della shell Bourne, dando a ogni sistema simile a Unix® un’implementazione della shell Bourne originale in un modo o nell’altro. Su molti sistemi LINUX®, questo è semplicemente un collegamento da “sh” a “bash” o qualche altro discendente capace.