Nei sistemi operativi basati su Unix la shell
è una applicazione che permette di eseguire i comandi del sistema tramite una interfaccia testuale a linea di comando.
La shell più popolare oggi è bash, acronimo di “Bourne-Again Shell”, un gioco di parole fra Stephen Bourne, l’autore della shell sh
da cui deriva bash, e il termine “born” (nato). Bash significa quindi sia “la nuova shell di Bourne” che “la shell rinata”.
Bash è la shell ufficiale del progetto GNU, ed è da tempo la shell di default in praticamente tutte le distribuzioni di Linux oltre che in OS X.
Per accedere a bash in OS X si utilizza il Terminale, una applicazione di cui si è già parlato più volte in questo blog. Il Terminale si trova in Applicazioni
> Utility
.
Bash permette di eseguire i comandi del sistema operativa sia in modo interattivo, scrivendoli uno alla volta sulla linea di comando, che tramite uno script di shell
(shell script
), un vero e proprio programma all’interno del quale è possibile usare variabili, strutture di controllo e funzioni, esattamente come in tutti i linguaggi di programmazione.
Uno script di shell ben fatto può diventare quindi un vero e proprio comando specializzato, eseguibile dalla linea di comando e praticamente indistinguibile dai comandi intrinseci del sistema.
Ma come si crea uno script di shell? Basta seguire alcune semplici regole.
-
Innanzi tutto lo script va scritto usando un editor, mai un wordprocessor come Word o Pages. Lo script deve infatti essere un semplice file di testo e non deve contenere i codici di formattazione o i caratteri speciali inseriti normalmente dai programmi di videoscrittura.
Come editor si può usare TextEdit, preinstallato in tutte le versioni di OS X, ma vanno ancora meglio programmi gratuiti, come TextWrangler, TextMate 2.0, Brackets, Atom, o commerciali, come il mostro sacro BBEdit e Sublime Text. Tutti questi editor hanno il grande vantaggio rispetto al semplice TextEdit di evidenziare i comandi di bash e di supportare l’autocompletamento delle parole chiave riconosciute dall’editor.
Volendo si possono usare anche macvim o emacs, ma chi è in grado di usarli non ha bisogno di sicuro di leggere queste note. -
Per permettere al sistema operativo di identificare il file come uno script per la shell bash, gli script devono iniziare con la riga
<pre>
#!/bin/bash
</pre>
- È buona regola salvare tutti i propri script in una cartella (
directory
) comune, in modo che siano facilmente rintracciabili dal sistema operativo (ma dopo un po’ di tempo anche da noi stessi!)
Per uniformarci alle convenzioni di Unix, creiamo una directorybin
nella nostra cartellaInizio
(o directoryhome
), dove salveremo tutti gli script.1 Lanciamo il Terminale ed eseguiamo i comandi
<pre>
$ cd ~
$ mkdir bin
</pre>
dove il simbolo ~
indica per convenzione la cartella home
dell’utente.
- Lo script deve essere reso eseguibile direttamente con il comando
<pre>
$ chmod u+x scriptname
</pre>
- Aiutiamo il sistema operativo a trovare facilmente i nostri script aggiungendo la directory
bin
appena creata alla variabile di ambientePATH
, che definisce le directory dove il sistema operativo va a cercare i comandi del sistema. Torniamo al Terminale ed eseguiamo in sequenza i comandi
<pre>
cp -p .bashrc .bashrc.ORIGINAL
echo "export PATH=~/bin:$PATH" >> .bashrc
</pre>
Il primo comando duplica il file .bashrc
originale, mentre il secondo aggiunge la riga contenuta fra virgolette alla fine del file .bashrc
.
Bisogna stare molto attenti ad usare due simboli di maggiore nel secondo comando altrimenti si rischia di sovrascrivere .bashrc
con effetti potenzialmente disastrosi (questo è il motivo per cui è bene prima duplicare il file .bashrc
originale).
Una volta chiuso e rilanciato il Terminale, la cartella ~/bin
sarà aggiunta alla lista delle directory contenenti i comandi eseguiti da bash.
Bisogna notare che la creazione della directory ~/bin
e la sua aggiunta al PATH del sistema vanno eseguiti una sola volta per ogni utente del Mac.
Vorrei infine sfatare una credenza ormai obsoleta: non è assolutamente necessario che il nome dello script termini con l’estensione .sh
. È una vecchia abitudine che ha l’unico vantaggio di rendere immediatamente riconoscibile uno script salvato in una directory qualunque del sistema. Ma è una pratica inutile se si segue il consiglio di tenere tutti gli script di shell in una directory predefinita come ~/bin
.
-
La cartella
Inizio
in OS X è quella identificata dall’icona di una casetta. ↩