Bash (Bourne-Again Shell) è l'interprete di comandi più diffuso nei sistemi GNU/Linux moderni, ed è quella cosa che vedete funzionare mentre un cursore lampeggiante aspetta i vostri ordini in un terminale testuale. Esso è governato, oltre che dai propri file di configurazione, da diverse variabili chiamate variabili di ambiente (environment variables), o "variabili di sistema", in cui sono immagazzinati dei valori che Bash stesso usa per funzionare ed orientarsi nel sistema operativo.
Questo piccolo articolo vuole essere un semplice riferimento ad alcune delle variabili d'ambiente più diffuse. Al termine dell'esposizione fornirò alcuni suggerimenti e raccomandazioni per poterle usare al meglio.
Questo articolo tratterà solamente le variabili di sistema. Bash può gestire anche variabili "personalizzate" (come in un qualsiasi script), ma esse non possono ovviamente avere lo stesso nome delle variabili di ambiente; ovvero le variabili di ambiente non possono essere usate per scopi "personali".
Qualora vogliate creare un vostro script, vi avviso fin d'ora che, a meno che non vogliate fare operazioni esplicite con le variabili di sistema, usate delle variabili personali per i vostri scopi.
[0] - Ad ogni variabile (tranne alcune di sola lettura come PPID e UID) può essere assegnato un nuovo valore, sebbene sia altamente sconsigliato per molte di esse (in particolare IFS e PATH).
[1] - Per leggere una qualsiasi delle variabili di ambiente, o una qualsiasi variabile di Bash, basta usarla come unico argomento di echo, anteponendo un simbolo del dollaro ( $) alla variabile stessa. Per esempio, se volessimo leggere il nome di rete del computer dovremmo scrivere echo $HOSTNAME.
[2] - Per assegnare un valore ad una variabile Bash (di sistema e non) vale la stessa regola di assegnazione di valori a variabili in linguaggi di programmazione come il C, ovvero VARIABILE=valore, avendo però cura di non lasciare spazi subito prima e subito dopo il segno di uguaglianza.
[3] - Per assegnare un valore stringa ad una variabile è necessario racchiudere la stringa tra doppi apici:
VARIABILE="stringa con spazi"
A meno che gli spazi non vengano preceduti da backslash:
VARIABILE=stringa\ con\ spazi
[4] - Esistono molte altre variabili d'ambiente oltre a quelle elencate qui. Se siete curiosi potete leggere la documentazione di Bash con man bash.
[5] - HOSTNAME è una semplice variabile, che Bash usa per sapere qual è il nome dell'host. Per cambiarla in modo definitivo è necessario usare il comando sudo hostname <nome_macchina>, sostituendo a <nome_macchina> il nome che volete dare al vostro PC. Il nuovo nome verrà adottato a partire dalla nuova istanza della shell.
[6] - SHLVL viene aumentato di 1 ogni volta che viene innestata una nuova istanza di Bash nel terminale corrente con su o chroot, o anche aprendo una nuova shell semplicemente richiamando bash. Il valore che le viene assegnato è un semplice indice, e SHLVL può assumere valori negativi:
SHLVL=-1
In questo caso, innestando una nuova shell nel terminale il valore di SHLVL salirà a 0. Il valore di SHLVL si azzera se si torna al login con exit, se si riavvia il sistema o se si chiude un terminale in X.
[7] - Assegnando un nuovo valore a HOME il comando cd vi porterà nella nuova cartella, se esiste. Il nuovo percorso HOME rimarrà attivo finchè non uscirete dall'istanza della shell corrente, e per renderlo definitivo dovrete esportarlo in uno script di avvio. Per default la HOME di un utente è sempre /home/<nome_utente>.
[8] - Contrariamente a quanto potreste pensare, assegnare un nuovo valore a PWD non significa spostarsi nella directory assegnata, ma semplicemente il cambiamento di una variabile, che influisce sul prompt se in esso è presente il riferimento \w o \W. (Consultate questo articolo per ulteriori informazioni sul prompt di Bash.) Potete cambiare PWD con un valore d'esempio:
PWD=/home
E vedrete soltanto cambiare il prompt, che visualizzerà il contenuto di PWD e non la directory corrente.
[9] - PPID è una variabile di sola lettura. Per cambiarla l'unico modo è uscire dalla shell con exit e richiamarne una nuova istanza, effettuando un nuovo login o aprendo un nuovo terminale testuale in X.
[10] - UID è una variabile di sola lettura. L'unico modo per cambiarla è agire tramite usermod, modificando l'user ID dell'utente in esame. L'user ID dell'utente root è sempre 0, è modificabile ma non vi consiglio di farlo.
[11] - Nel caso in cui voleste modificare PATH e aggiungere solo una directory (per esempio /temp), è consigliabile fare un semplice accodamento:
PATH=$PATH:/temp
Invece di riscrivere l'intera lista di directory.
export è un comando built-in di Bash, ovvero non lo troverete da nessuna parte nel sistema perché è parte integrante della shell che state usando.
Esso serve a rendere valide variabili e funzioni della shell in tutti i processi figli: in poche parole, se esporterete una variabile con export nel file di configurazione di Bash essa sarà resa valida sempre, fino a che non ne varierete il valore in una sottoshell o in un login alternativo, come su o chroot, o fino a che non la modificherete nella configurazione della shell.
Esportare una variabile è molto semplice, e basta lanciare
export VARIABILE=<valore>
Oppure, nella stessa istanza della shell, assegnare prima il valore alla variabile con
VARIABILE=<valore>
Ed esportarla successivamente con
export VARIABILE
Se volete vedere tutte le variabili esportate nella istanza della shell corrente, anche per verificare che la vostra variabile sia stata correttamente esportata, potete lanciare il comando
export -p
Oppure, siccome a volte l'elenco è molto lungo, potete filtrare l'intera lista con grep:
export -p | grep VARIABILE
Dove VARIABILE sarà la vostra variabile appena esportata. Ricordate che grep è case sensitive per default, ed è possibile renderlo case insensitive aggiungendo l'opzione -i:
export -p | grep -i VARIABILE.
MegaLab.it rispetta la tua privacy. Per esercitare i tuoi diritti scrivi a: privacy@megalab.it .
Copyright 2008 MegaLab.it - Tutti i diritti sono riservati