7.9. I file di avvio della shell Bash

Il programma di shell /bin/bash (a cui faremo riferimento come «la shell» da ora in poi) usa una collezione di file di avvio per creare un ambiente in cui funzionare. Ogni file ha uno specifico uso e può influenzare login e ambienti interattivi in modi differenti. I file nella directory /etc forniscono configurazioni globali. Se esiste un file equivalente nella propria home directory, questo sovrascriverà le definizioni globali.

Una shell login interattiva viene fatta partire dopo un login portato a termine con successo, usando /bin/login, leggendo il file /etc/passwd. Una shell non-login interattiva viene fatta partire da linea di comando (es., [prompt]$/bin/bash). Una shell non interattiva di solito è presente quando è in esecuzione uno shell script. Non è interattiva perché sta processando uno script e non aspetta un input dell'utente tra i vari comandi.

Per maggiori informazioni vedere info bash nella sezione Bash Startup Files and Interactive Shells.

I file /etc/profile e ~/.bash_profile sono letti quando una shell viene invocata come login shell interattiva.

Il file /etc/profile di base creato di seguito definisce alcune variabili ambiente necessarie per il supporto del linguaggio nativo. Definendole appropriatamente si ottiene:

Questo script definisce anche la variabile ambiente INPUTRC che permette a Bash e a Readline di usare il file /etc/inputrc creato prima.

Sostituire <ll> con le due lettere del codice della propria lingua (es. «en») e <CC> con le due lettere del codice del proprio paese (es. «GB»). <charmap> deve essere rimpiazzato con il charmap canonico per la propria localizzazione scelta. Possono essere presenti anche modifiche opzionali come «@euro».

L'elenco di tutte le localizzazioni supportate da Glibc può essere ottenuto eseguendo il seguente comando:

locale -a

Le localizzazioni possono avere molti sinonimi, ad es. a «ISO-8859-1» si fa anche riferimento come «iso8859-1» e «iso88591». Alcune applicazioni non possono gestire correttamente i vari sinonimi (es., richiedere che «UTF-8» sia scritto come «UTF-8», e non «utf8»), quindi è più sicuro nella maggioranza dei casi scegliere il nome canonico per una particolare localizzazione. Per determinare il nome canonico eseguire il seguente comando, dove <locale name> è l'output dato da locale -a per la propria localizzazione preferita («en_GB.iso88591» nel nostro esempio).

LC_ALL=<locale name> locale charmap

Per la localizzazione «en_GB.iso88591» il comando precedente stamperà:

ISO-8859-1

Il risultato di questo è un'impostazione finale di «en_GB.ISO-8859-1». È importante che la localizzazione trovata usando l'euristica precedente sia testata prima di aggiungerla ai file di avvio di Bash:

LC_ALL=<locale name> locale language
LC_ALL=<locale name> locale charmap
LC_ALL=<locale name> locale int_curr_symbol
LC_ALL=<locale name> locale int_prefix

I comandi precedenti dovrebbero stampare i nomi di nazione e linguaggio, la codifica caratteri usata dalla localizzazione, la moneta locale e il prefisso da anteporre al numero telefonico per chiamare il paese. Se uno qualunque dei comandi precedenti fallisce con un messaggio simile a quello mostrato sotto ciò significa che la propria localizzazione non è stata installata nel capitolo 6 o non è supportata dalla installazione di default di Glibc.

locale: Cannot set LC_* to default locale: No such file or directory

Se ciò succede bisogna installare la localizzazione desiderata usando il comando localedef, o considerare la scelta di una localizzazione differente. Le prossime istruzioni suppongono che non ci sia tale messaggio di errore in Glibc.

Anche alcuni pacchetti oltre LFS potrebbero non avere il supporto per la localizzazione scelta. Un esempio è la libreria X (parte del sistema X Window), che emette il seguente messaggo di errore se la localizzazione non corrisponde esattamente a uno dei nomi delle mappe caratteri nei propri file interni:

Warning: locale not supported by Xlib, locale set to C

In parecchi casi Xlib si aspetta che la mappa caratteri sia elencata in maiuscolo con tratti canonici. Per esempio, "ISO-8859-1" invece che "iso88591". È anche possibile trovare un'appropriata specificazione rimuovendo la mappa caratteri parte delle specifiche locali. Questo può essere verificato eseguendo il comando locale charmap in entrambe le localizzazioni. Per esempio uno potrebbe dover cambiare "de_DE.ISO-8859-15@euro" in "de_DE@euro" per avere questa localizzazione riconosciuta da Xlib.

Anche altri pacchetti potrebbero funzionare scorrettamente (ma non necessariamente mostrare messaggi di errore) se il nome della localizzazione non è come si aspettano. In questi casi investigare come altre distribuzioni Linux supportano la propria localizzazione potrebbe fornire utili informazioni.

Una volta che sono state determinate le impostazioni locali corrette creare il file /etc/profile:

cat > /etc/profile << "EOF"
# Begin /etc/profile

export LANG=<ll>_<CC>.<charmap><@modifiers>
export INPUTRC=/etc/inputrc

# End /etc/profile
EOF

Le localizzazioni «C» (default) e «en_US» (quella raccomandata per utenti inglesi negli Stati Uniti) sono diverse. «C» usa il set di caratteri US-ASCII 7-bit, e tratta i byte con il bit più alto attivo come caratteri invalidi. Questo perché, per esempio, il comando ls li sostituisce con il punto interrogativo in quella localizzazione. Inoltre un tentativo di inviare mail con tali caratteri da Mutt o Pine provoca messaggi trasmessi non conformi RFC (il set dei caratteri nella posta in uscita è indicato come «unknown 8-bit»). Così si può usare il locale «C» solo se si è sicuri che non si avrà mai bisogno di caratteri 8-bit.

Localizzazioni basate su UTF-8 non sono ben supportate da molti programmi. Es., il programma watch visualizza solo caratteri ASCII in localizzazioni UTF-8 e non ha tale limitazione nelle localizzazioni 8-bit tradizionali come en_US. È in sviluppo la documentazione e, se possibile, la correzione di alcuni problemi, vedere http://www.linuxfromscratch.org/blfs/view/svn/introduction/locale-issues.html.