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.

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, quindi è più sicuro 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 country
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:

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

Talvolta è possibile correggere questo rimuovendo la mappa caratteri parte delle specifiche locali, se ciò non cambia la mappa caratteri che Glibc associa alla localizzazione (ciè 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]
export INPUTRC=/etc/inputrc

# End /etc/profile
EOF
[Nota]

Nota

Le localizzazioni “C” (default) e “en_US” (quella raccomandata per utenti inglesi negli Stati Uniti) sono diverse.

Configurare il layout della tastiera, il font per lo schermo e le variabili di ambiente relative alla località sono i soli passi per l'internazionalizzazione necessari per supportare localizzazioni che usino una codifica ordinaria a byte singolo e una direzione di scrittura da sinistra a destra. Casi più complessi (incluse localizzazioni basate su UTF-8) richiedono passi e patch aggiuntivi, perché molte applicazioni tendono a non funzionare correttamente in tali condizioni. Questi passi e patch non sono incluse nel libro e tali localizzazioni non sono supportate da LFS.