3.4.4 L’ambiente

Si definisce ambiente (o environment) un insieme di variabili dette appunto variabili di ambiente che possono essere accedute dai processi. Tali variabili non sono passate in input ai processi, ma sono gestite dalla shell. Le variabili di ambiente più comuni sono riportate nella tab. 3.4, ma si consiglia di far riferimento alla man page environ(5) per avere un elenco più completo.


|-----------------------------------------------------------|
Variabile--Significato------------------------------------------|
USER      Username                                            |
LOGNAME    Username con cui `e stato effettuato il login             |
HOLAMNEG      HLoomcealidzziarezciotonrey dell’utente corrente                      |
PATH      Elenco delle directory, separate da ‘:’, contenenti i file eseguibili
PWD       Working directory                                    |
SHELL      Tipo di shell                                       |
TERM      Tipo di terminale                                   |
PAGER      Text viewer preferito                                  |
EDITOR     Text editor preferito                                 |
BROWSER    Browser preferito                                     |
TMPDIR-----Directory-contenente-i file-temporanei---------------------

Tabella 3.4: Le variabili di ambiente.

Molte delle variabili di ambiente sono utilizzate dalla maggior parte dei programmi ed in genere per queste si usa la convenzione di esprimerle in caratteri maiuscoli. Il kernel non usa mai queste variabili, ma esse costituiscono un modo molto comodo per definire comportamenti dei programmi a livello generale senza dover passare loro in input un elenco di argomenti troppo complesso. La shell, ad esempio, ne utilizza molte per il suo funzionamento.

La visualizzazione delle variabili di ambiente definite è ottenibile tramite il comando interno set che serve anche a definire molte delle impostazioni di Bash. La sua sintassi è mostrata nella sez. 3.4.11.

Una variabile di ambiente è definita per mezzo della seguente sintassi

 
$ varname=[value]  
dove

Ad esempio, il comando

 
$ PIPPO=ciao  
definisce la variabile di ambiente PIPPO e la imposta col valore ciao;

Il valore contenuto in una variabile di ambiente può essere visualizzato per mezzo del comando interno echo che serve per visualizzare delle stringhe.

____________________________________________________________________

Comando (bash): echo

SINTASSI  
$ echo [option] [arg ...]  
DESCRIZIONE

____________________________________________________________________

Esiste anche un comando di sistema echo (man page echo(1)), corrispondente al file eseguibile /bin/echo, che ha una sintassi analoga al comando interno di Bash. Per quanto detto precedentemente, scrivendo echo sulla riga di comando, bash esegue il comando interno echo. Se si vuole eseguire il comando echo di sistema, si deve digitare sulla riga di comando /bin/echo.

Dunque, il comando

 
$ echo $PATH  
visualizza il contenuto della variabile d’ambiente PATH.

Secondo la sintassi di Bash, le variabili di ambiente sono sempre riferite anteponendo ad esse il simbolo ‘$’, tranne nel caso in cui esse vengono definite. Ovvero per definire la variabile PIPPO si utilizza il suo nome così com’è scritto, mentre quando si fa riferimento ad essa si deve utilizzare l’identificatore $PIPPO.

Le variabili di ambiente hanno visibilità soltanto all’interno di un determinato contesto che è l’ambito della shell stessa, per cui soltanto il processo attuale, ovvero la shell stessa (con i suoi comandi interni) è al corrente delle variazioni. Affinché anche i processi esterni (figli) siano in grado di “vedere” le impostazioni delle variabili di ambiente è necessario utilizzare il comando interno export.

____________________________________________________________________

Comando (bash): export

SINTASSI  
$ export [option] [varname[=value] ...]  
DESCRIZIONE

__________________________________________________

Il comando set visualizza l’elenco delle variabili di ambiente visibili al processo (shell) corrente, ma se si vuole visualizzare l’elenco delle variabili d’ambiente visibili ai processi figli è necessario utilizzare il comando export.

Ad esempio, il comando

 
$ PIPPO=ciao  
definisce la variabile di ambiente PIPPO con il contenuto “ciao” ed il comando seguente

 
$ echo $PIPPO  
visualizza il contenuto della stessa variabile. Ma se a questo punto si lancia un processo figlio (qualunque comando impartito dalla linea di comando, a meno che non sia un comando interno di Bash, implica la generazione di un processo figlio), come, per esempio, invocando l’esecuzione di un altro processo bash con il comando

 
$ bash  
e si visualizza il contenuto della variabile di ambiente PIPPO tramite il comando

 
$ echo $PIPPO

$  
si ottiene una risposta nulla, come se tale variabile non fosse stata definita. Se si chiude il processo bash appena lanciato con il comando

 
$ exit  
e si rende visibile ai processi figli tale variabile con il comando

 
$ export $PIPPO  
rilanciando un processo figlio, questo sarà in grado di “vedere” tale variabile. Infatti, analogamente a quanto fatto precedentemente

 
$ bash
$ echo $PIPPO
ciao
$  
ma in questo caso viene visualizzato il contenuto della variabile di ambiente PIPPO impostata a “ciao”.

Quindi, i seguenti comandi  
$ PIPPO=ciao
$ export $PIPPO  
sono equivalenti a  
$ export PIPPO=ciao  
Per eliminare una variabile di ambiente è necessario utilizzare il comando interno unset.

____________________________________________________________________

Comando (bash): unset

SINTASSI  
$ unset [option] [varname ...]  
DESCRIZIONE

____________________________________________________________________

Alcune variabili di ambiente non possono essere rimosse.

Lo spazio di memoria dedicato alle variabili d’ambiente, ovvero l’environment, è piuttosto limitato. Creare molte variabili d’ambiente o tali che utilizzino molta memoria, può facilmente andare oltre il limite riservato allo scopo. Ad esempio

$ eval "`seq 10000 | sed -e 's/.*/export var&=ZZZZZZZZZZZZZZ/'`"
crea una variabile d’ambiente troppo lunga e quindi la visualizzazione dell’ambiente con il comando du (man page du(1)) genera il seguente output

$ du
bash: /usr/bin/du: Argument list too long
[da completare ...]

[da completare ...]