3.9 Le Shell

In FreeBSD, la maggior parte del lavoro di tutti i giorni viene svolto tramite un'interfaccia a riga di comando chiamata shell. Uno dei compiti principali di una shell è quello di prendere in input dei comandi ed eseguirli. Inoltre molte shell hanno delle funzioni built-in (incorporate) utili nei lavori ordinari come la gestione dei file, la sostituzione dei nomi dei file, la modifica della riga di comando, la creazione di macro di comandi, e la gestione delle variabili d'ambiente. FreeBSD si propone con una serie di shell, come la Shell Bourne, sh, e la versione successiva della C-shell, tcsh. Molte altre shell sono disponibili nella FreeBSD Ports Collection, come le shell zsh e bash.

Quale shell devi usare? È veramente una questione di gusti. Se sei un programmatore di C potresti sentirti a tuo agio con una shell C-like come la tcsh. Se vieni da Linux o non sei pratico dell'interfaccia a riga di comando di UNIX® potresti provare la bash. Il fatto è che ogni shell ha delle caratteristiche che possono o meno combaciare con il tuo ambiente di lavoro preferito, e quindi devi scegliere tu stesso quale shell utilizzare.

Una caratteristica comune in una shell è il completamento dei nomi dei file. Dopo aver digitato alcuni dei primi caratteri di un comando o di un nome di file, la shell di solito può completare in modo automatico il resto del comando o del nome del file tramite la pressione del tasto Tab sulla tastiera. Ecco un esempio. Supponiamo che hai due file chiamati foobar e foo.bar. Vuoi cancellare foo.bar. Quello che dovresti digitare sulla tastiera è: rm fo[Tab].[Tab].

La shell dovrebbe visualizzare rm foo[BEEP].bar.

Il [BEEP] è la campanella della console, che mi segnala che la shell è incapace di completare interamente il nome del file poichè esiste più di una sola corrispondenza. Sia foobar che foo.bar iniziano con fo, tuttavia la shell è riuscita a completarlo in foo. A questo punto premendo ., e poi di nuovo Tab, la shell sarà in grado di completare da sola il resto del nome del file.

Un altro aspetto di una shell è l'uso delle variabili d'ambiente. Le variabili d'ambiente sono una coppia di valori mutevoli memorizzati nello spazio dell'ambiente della shell. Questo spazio può essere letto dai programmi invocati dalla shell, e di conseguenza questo spazio può contenere le configurazioni di molti programmi. Qui sotto c'è una lista delle variabili d'ambiente più comuni con il loro rispettivo significato:

Variabile Descrizione
USER Il nome dell'utente attualmente loggato.
PATH Lista di directory separate da due punti utilizzate per la ricerca dei binari.
DISPLAY Nome di rete del display X11 a cui connettersi, se disponibile.
SHELL La shell corrente.
TERM Il nome del tipo di terminale dell'utente. Usato per determinare le capacità del terminale.
TERMCAP Serie di elementi di codici di escape del terminale utilizzati per realizzare svariate funzioni del terminale.
OSTYPE Il tipo di sistema operativo. FreeBSD, ad esempio.
MACHTYPE L'architettura della CPU su cui il sistema gira.
EDITOR L'editor di testo preferito dall'utente.
PAGER L'impaginatore di testo preferito dall'utente.
MANPATH Lista di directory separate da due punti utilizzate nella ricerca delle pagine man.

Il modo di settare una variabile d'ambiente varia leggermente a seconda della shell utilizzata. Per esempio, nelle shell C-Style come tcsh e csh, puoi usare setenv per settare le variabili d'ambiente. Sotto le shell Bourne come sh e bash, puoi usare export per settare le tue variabili d'ambiente correnti. Per esempio, per settare o modificare la variabile d'ambiente EDITOR a /usr/local/bin/emacs, sotto csh o tcsh si può utilizzare il comando:

% setenv EDITOR /usr/local/bin/emacs

Sotto le shell Bourne:

% export EDITOR="/usr/local/bin/emacs"

Con la maggior parte delle shell puoi inoltre creare un'espansione di una variabile d'ambiente mettendo sulla riga di comando il simbolo $ davanti al nome della variabile stessa. Per esempio, echo $TERM visualizzerà ciò che corrisponde a $TERM, poichè la shell espande $TERM e passa il risultato a echo.

Le shell trattano molti caratteri speciali, chiamati meta-caratteri come rappresentazioni speciali di dati. Il più comune di questi è il simbolo *, che rappresenta diverse istanze di caratteri in un nome di file. Questi meta-caratteri possono essere usati per la sostituzione dei nomi di file. Per esempio, digitando echo * è quasi come aver digitato ls poichè la shell prende tutti i file che corrispondono a * e li mette sulla riga di comando con echo che quindi li visualizza.

Per impedire alla shell di interpretare questi caratteri speciali, questi possono essere messi in escape mettendo subito prima di essi un backslash (\). echo $TERM visualizza il tipo del tuo terminale. echo \$TERM visualizza $TERM così com'è.

3.9.1 Cambiare la Propria Shell

Il modo più semplice per cambiare la propria shell è quello di usare il comando chsh. Eseguendo chsh verrà invocato l'editor definito nella tua variabile d'ambiente EDITOR; nel caso in cui questa non sia stata settata, verrà invocato vi. Modifica la riga “Shell:” in base alle tue esigenze.

Puoi anche eseguire chsh con l'opzione -s; in questo modo verrà settata la shell in modo diretto, senza che sia necessario invocare l'editor. Per esempio, se vuoi cambiare la tua shell in bash, potresti digitare il seguente comando:

% chsh -s /usr/local/bin/bash

Nota: La shell che desideri utilizzare deve essere presente nel file /etc/shells. Se hai installato una shell dalla collezione dei port, allora la nuova shell dovrebbe essere già stata inserita nel suddetto file in modo automatico. Se installi una shell manualmente, questo lavoro lo devi fare tu.

Per esempio, se installi bash a mano e la metti sotto /usr/local/bin, dovresti fare questo:

# echo "/usr/local/bin/bash" >> /etc/shells

Dopo averlo fatto riavvia chsh.

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.