La storia delle shell dei sistemi operativi inizia negli anni Settanta nei laboratori Bell, dove i pionieri dell’informatica Ken Thompson e Dennis Ritchie sviluppavano il sistema operativo Unix, che qualche anno dopo sarà la base di partenza per l’attuale Linux. Una delle sfide informatiche di allora era creare un interprete dei comandi che fosse programmabile e che fornisse un’interfaccia utente del tutto modificabile. Thompson fu il primo a creare questo interprete dei comandi chiamato “shell”, in italiano “guscio”. Un guscio che insieme al kernel, in italiano “nocciolo”, costituisce tutt’oggi un elemento fondamentale di un sistema operativo Linux: quella che permette all’utente umano di impartire comandi alla macchina e interagire con il sistema operativo stesso.
Dopo la shell Thompson, fu la volta della Bourne shell sviluppata dall’informatico britannico Stephen Bourne, che diventò ben presto un nuovo standard: era un linguaggio di scripting interattivo che permetteva di eseguire sia attività in primo piano che in background e offriva un controllo, anche se elementare, dei processi. Da allora, furono molti i tipi di shell inventati, ma è negli anni Ottanta che arriva la Bash shell. Per problemi di copyright, il progetto GNU che voleva creare un clone di Unix gratuito, incaricò Brian Fox di scrivere un clone della Bourneshell e la soprannominò “Bourne Again Shell”, accorciata in Bash. Da allora, questo interprete dei comandi è diventato fondamentale per Linux, tanto da essere molto importante e molto usato ancora oggi.
Cos’è una shell e come funziona
Quando si vuole far interagire un uomo con un calcolatore, servirà un interprete dei comandi digitali che l’utente invia come input al sistema operativo, che poi dovrà eseguirli. La shell è quindi un interprete dei comandi che svolge il ruolo di interfaccia: recepisce i comandi umani, li traduce in istruzioni eseguibili da un computer e li trasmette al kernel per l’esecuzione. Per shell si intende dunque il software che prende i comandi digitati nella riga che comincia dal prompt (letteralmente “richiesta”), interpreta gli input e fa eseguire al sistema informatico le attività richieste.
Spesso, parlando shell, si potrebbe cadere nell’errore di confonderla con altri due elementi essenziali per il funzionamento del sistema operativo: la finestra del terminale o la riga di comando, usati come sinonimi ma non intercambiabili tra loro.
La finestra del terminale, infatti, è la rappresentazione software di un terminale fisico che permette di avere una connessione al computer e quindi di accedere alla shell. La riga dei comandi, invece, è dove l’utente potrà digitare le istruzioni che la shell potrà interpretare e fornire al kernel. Inoltre, le shell consentono di raccogliere una successione di comandi in un file di testo chiamato script, così che tutti i comandi vengano eseguiti, in ordine, ogni volta che il singolo file testuale viene lanciato. Uno script permette quindi di ottenere efficienza, ripetibilità e convenienza. Conoscere la natura e il funzionamento di una shell è così fondamentale per capire la sua importanza nella storia dell’evoluzione dei sistemi operativi, e delle shell stesse.
Bash shell: come funziona e perché è importante oggi
La Bash shell incorpora e migliora tutte le funzionalità della Bourne shell, ma nasce come una sua evoluzione e per questo offre tutte le migliorie già introdotte in altre interfacce più moderne come la shell C e la KornShell. Inoltre, ha permesso l’introduzione dei file di configurazione ".bashrc" e ".bash_profile". Ciò che davvero è diversa, invece, è la riga di comando, che ha superato per capacità tutte le shell precedenti: non solo sono state aggiunte nuove funzioni, ma ha permesso col tempo di aumentare i parametri nel prompt dei comandi, così che gli utenti potessero ottenere una maggiore personalizzazione del proprio prompt.
Da oltre 30 anni, la Bash shell è oggetto di continui aggiornamenti e miglioramenti, tanto da essere diventata e consolidata come la shell predefinita per i sistemi operativi Linux.
Per alcuni anni, almeno fino alla versione 10.15 del macOS, anche Apple la utilizzo come shell standard e ancora oggi è possibile impostarla sui sistemi operativi della Mela. Per Linux, però, il discorso è diverso: la Bash è un interprete dei comandi stabile ed efficiente, tanto che le nuove shell come la shell Z e la Fish shell introdotte negli ultimi anni non riescono a imporsi, nonostante le funzionalità aggiuntive che offrono. Uno dei motivi è sicuramente il fatto che la Bash shell è ormai conosciuta nel mondo delle distribuzioni Linux, tanto che chi utilizza questo sistema operativo potrà lavorare rapidamente e in modo efficace da subito, senza dover adattarsi alle piccole differenze di sintassi, che possono provocare problemi di esecuzione.
Ciò che rende la Bash una shell dominante, quindi, è la sua diffusione, la compatibilità e quindi il fatto di essere ben nota.
L’arrivo di un nuovo standard che possa spodestare la Bash shell dai sistemi Linux, al momento, sembra escluso. Per trovare un “degno erede”, bisogna attendere una shell che offra una quasi completa compatibilità con le versioni precedenti e che offra funzionalità aggiuntive tali da spingere gli sviluppatori ad accettare di abbandonare la Bash shell che ormai conoscono a menadito.