Variabile d'ambiente: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Ianezz (discussione | contributi)
Ianezz (discussione | contributi)
Nessun oggetto della modifica
Riga 1:
{{disambigua}}
Nei [[Sistema operativo|sistemi operativi]], le '''variabili d'ambiente''' (dall'inglese "''environment variables''") sono un insieme dinamico di [[variabile (informatica)|variabili]] a disposizione dei [[Processo (informatica)|processi]] che ne possono influenzare il funzionamento.
Il termine '''variabile d'ambiente''' (dall'inglese "''environment variable''") indica un tipo particolare di [[variabile (informatica)|variabile]] nell'[[Ambiente (programmazione)|ambiente globale]] di un programma la quale presenta caratteristiche e meccanismi di gestione che sono uniformi per tutti i programmi di uno specifico [[sistema operativo]], indipendentemente dal [[linguaggio di programmazione]] usato, ma che variano da un sistema operativo all'altro.
 
* [[Variabile d'ambiente (Unix)|Variabili d'ambiente]] nei sistemi operativi [[Unix]] e [[Unix-like]].
Oltre che allo scopo di configurazione, esse sono usate anche per comunicare agli [[script]] utente delle informazioni che possono essere utili per il loro funzionamento, come ad esempio il nome della directory personale dell'utente.
* [[Variabile d'ambiente (Windows)|Variabili d'ambiente]] nei sistemi operatviti [[Microsoft Windows]].
 
* [[Variabile d'ambiente (AmigaOS)|Variabili d'ambiente]] nei sistemi operativi [[AmigaOS]].
In alcuni sistemi, come i sistemi [[Unix]] e [[Unix-like]], ogni processo possiede una propria copia delle variabili d'ambiente, ed i nuovi processi ne ereditano una copia dal [[processo padre]] che li ha generati.
 
In altri sistemi operativi, come ad esempio [[Microsoft Windows]], ogni processo possiede una propria copia delle variabili d'ambiente, tuttavia i nuovi processi ne ereditano all'avvio una copia da un ambiente globale che è condiviso tra i processi, e che i processi possono modificare.
 
In altri sistemi operativi ancora, come ad esempio [[AmigaOS]], esse sono condivise da tutti i processi in esecuzione, ed ogni modifica è subito visibile agli altri processi.
 
== Variabili d'ambiente in Microsoft Windows e MS-DOS ==
Nei sistemi [[Microsoft Windows]] e [[MS-DOS]] non viene fatta distinzione tra lettere maiuscole e minuscole nei nomi delle variabili d'ambiente, per cui "<tt>PATH</tt>" equivale a "<tt>Path</tt>" e "<tt>path</tt>"; è tuttavia comune specificare i nomi esclusivamente con lettere maiuscole, ed usare solo lettere (e non ad esempio cifre). I valori sono tipicamente [[Stringa (informatica)|stringhe]] di caratteri.
 
L'uso delle variabili d'ambiente come strumento di configurazione nei sistemi Microsoft Windows è andato via via riducendosi al minimo, dato che questa funzione è affidata al [[Registro di sistema]].
 
Nell'[[interfaccia a linea di comando]] di tutti i sistemi [[Microsoft Windows]] e [[MS-DOS]] è possibile assegnare un valore ad una variabile d'ambiente tramite il comando <tt>set</tt><ref>{{cita web
|url=http://technet.microsoft.com/it-it/library/bb490998(en-us).aspx
|titolo=Set
|accesso=24-05-2008
|lingua=en
}}</ref> (sostituendo un eventuale valore assegnato in precedenza), ed utilizzarne il valore nelle righe di comando e nei [[file batch]] specificandone il nome tra caratteri "<tt>%</tt>". Ad esempio, in un file batch:
set NOME=alice
echo %NOME%
 
È anche possibile combinare le due cose, ad esempio per estendere il valore di una variabile d'ambiente includendo nel nuovo valore anche il valore precedente:
set PATH=%PATH%;C:\alice
 
Nei sistemi [[Microsoft]] [[Windows NT]] (quindi anche [[Windows 2000]], [[Windows XP]] e successivi), oltre che alla possibilità di assegnare valori alle variabili d'ambiente anche tramite l'[[interfaccia grafica]], è stata introdotta la divisione su tre livelli delle variabili d'ambiente<ref>{{cita web
|url=http://support.microsoft.com/kb/100843
|titolo=Variabili d'ambiente in Windows NT
|accesso=24-05-2008
|data=03-02-2006
}}</ref>:
# le ''variabili d'ambiente di sistema'', alcune delle quali sono nascoste e/o di uso riservato al sistema; soltanto gli [[Amministratore di sistema|amministratori del sistema]] possono aggiungere o modificare variabili d'ambiente di questo tipo;
# le ''variabili d'ambiente utente''; esse sono specifiche per il particolare utente, che può liberamente assegnare valori e creare nuove variabili. Una variabile d'ambiente utente maschera una variabile d'ambiente di sistema che abbia lo stesso nome, con l'eccezione della variabile <tt>PATH</tt>, che invece viene concatenata a quella di sistema;
# le ''variabili d'ambiente assegnate in <tt>autoexec.bat</tt>'', che esistono solamente per preservare la compatibilità con alcuni programmi MS-DOS.
 
Le ''variabili d'ambiente di sistema'' e le ''variabili d'ambiente utente'' possono essere modificate a caldo, senza richiedere un riavvio del sistema. I nuovi processi hanno visibilità immediata delle modifiche, mentre i processi preesistenti debbono essere riavviati per far prendere in considerazione i nuovi valori.
 
Le ''variabili d'ambiente assegnate in autoexec.bat'' sono assegnate in maniera stabile all'avvio del sistema e non possono essere modificate a caldo. Tuttavia è possibile mascherarne i valori con delle variabili d'ambiente di sistema o utente aventi lo stesso nome.
 
In aggiunta ai tre livelli sopra menzionati si può considerare un ulteriore livello, che è quello delle finestre dell'[[interfaccia a linea di comando]]: in ogni finestra è possibile modificare ed aggiungere variabili d'ambiente tramite il comando <tt>set</tt>, ma queste impostazioni sono visibili unicamente ai comandi avviati dalla stessa finestra, e vanno perse alla sua chiusura, in maniera non molto dissimile da quanto avviene per i sistemi [[Unix]] e [[Unix-like]].
 
=== Variabili d'ambiente di rilievo ===
==== PATH ====
La variabile d'ambiente <tt>PATH</tt> specifica un elenco di [[directory]] separate da punto e virgola "<tt>;</tt>" in cui il sistema ricerca i [[File eseguibile|file eseguibili]] (nell'ordine in cui sono indicate), oltre che nella directory corrente.
 
Essa è usata quando il nome del file eseguibile non è qualificato con il percorso della directory che lo contiene, sia per programmi che per [[Libreria software|librerie software]].
 
È quindi pratica comune, in fase di installazione di un nuovo programma, estendere il valore di questa variabile d'ambiente in modo da includere anche la directory ove risiedono i file eseguibili del programma che è stato installato.
 
Essa costituisce un'eccezione alla regola per cui i valori delle le variabili d'ambiente utente mascherano il valore di variabili d'ambiente di sistema con lo stesso nome: il valore utente in questo caso viene concatenato al valore di sistema invece di sostituirlo.
 
==== PATHEXT ====
Questa variabile contiene un elenco separato da separate da punto e virgola "<tt>;</tt>" delle [[Estensione (file)|estensioni]] che un nome di file deve avere per essere considerato eseguibile dal sistema. Un valore tipico è:
.COM; .EXE; .BAT; .CMD; .VBS; .VBE; .JS ; .WSF; .WSH
 
==== TEMP e TMP ====
Queste variabili indicano il percorso completo a delle [[directory]] destinate a contenere dei file temporanei.
 
== Variabili d'ambiente nei sistemi Unix e Unix-like ==
Le variabili d'ambiente nei sistemi [[Unix]] e [[Unix-like]] si possono considerare come attributo dei [[Processo (informatica)|processi]]: ogni processo possiede il proprio insieme di variabili d'ambiente distinto e separato da quello degli altri processi; le variabili d'ambiente di un nuovo processo sono inizializzate con una copia delle variabili d'ambiente del processo padre, ovvero del processo che lo ha avviato.
 
In nessun caso un processo può modificare le variabili d'ambiente di un altro processo.
 
Le variabili d'ambiente sono implementate come un [[array]] di [[Stringa (informatica)|stringhe]] secondo le convenzioni del [[C (linguaggio)|linguaggio C]], nella forma "<tt>''nome''=''valore''</tt>": questo implica sia che i nomi non possano contenere il carattere "<tt>=</tt>", sia che né il nome né il valore possano contenere il carattere [[ASCII]] <tt>0x00, NUL</tt>. Due nomi sono considerati uguali solo se contengono esattamente gli stessi caratteri, per cui viene ad esempio fatta distinzione tra lettere maiuscole e minuscole.
 
A parte questi vincoli, la scelta di nomi per variabili d'ambiente è anche fortemente influenzata dai vincoli di sintassi delle [[Shell (informatica)|shell testuali]], che di fatto restringono la scelta a nomi composti da una lettera o un [[trattino basso]] ("<tt>_</tt>") seguiti da zero o più lettere, cifre e trattini bassi, ad esempio "<tt>A</tt>", "<tt>_Alice_12</tt>", "<tt>file_temporaneo</tt>". Possono esistere variabili che non seguono queste convenzioni nei nomi, tuttavia ciò ne rende alquanto difficile l'utilizzo pratico.
 
Nelle ''shell'' testuali è possibile usare il comando [[Env (Unix)|env]] sia per visualizzare le impostazioni correnti, sia per avviare nuovi programmi con valori particolari delle variabili d'ambiente.
 
In aggiunta a questo, il meccanismo delle variabili della ''shell'' si sovrappone in parte a quello delle variabili d'ambiente, per cui le variabili d'ambiente sono automaticamente anche variabili della ''shell'', e le variabili della ''shell'' possono a loro volta divenire variabili d'ambiente (ad esempio tramite il comando <tt>export ''nome_variabile''</tt> disponibile nelle shell come [[Bash]] o la [[Korn shell]]). Ad esempio:
#!/bin/sh
# USER è una variabile d'ambiente già avvalorata
# e la si può usare come qualsiasi altra variabile
# di shell
echo "$USER"
# Questa è una variabile di shell. I comandi avviati non ne
# hanno visibilità, se non passandola come parametro
MY_VAR=123
echo "$MY_VAR"
# Cerchiamo MY_VAR tra le variabili d'ambiente (non la troveremo).
env | grep "^MY_VAR="
# Con il comando export è possibile rendere MY_VAR anche
# una variabile d'ambiente, automaticamente visibile ai
# comandi avviati in seguito.
export MY_VAR
# Cerchiamo nuovamente MY_VAR tra le variabili d'ambiente
# (ora la troveremo).
env | grep "^MY_VAR="
 
=== Variabili d'ambiente di rilievo ===
==== DISPLAY ====
Questa variabile indica ai programmi dell'[[X Window System]] (i programmi con [[interfaccia grafica]] in generale) qual è <nowiki>l'</nowiki>''X server'' da usare per visualizzare la propria interfaccia grafica. I valori sono del tipo
[''host'']:''numero_display''[.''numero_screen'']
* ''host'' è facoltativo, ed indica il nome o l'[[indirizzo IP]] del computer su cui visualizzare l'interfaccia grafica; se non specificato, assume si tratti del computer locale;
* ''numero_display'' è un numero che indica la postazione utente (intesa come combinazione di [[mouse]], [[Tastiera (computer)|tastiera]] e uno o più [[Monitor (video)|monitor]]) sul computer indicato;
* ''numero_screen'' è un numero facoltativo che indica un monitor in particolare della postazione utente (in caso di più monitor).
 
Il valore tipico è "<tt>:0</tt>". Altri valori d'esempio possono essere "<tt>192.168.1.1:0</tt>" e "<tt>falcon.localdomain:1.1</tt>".
 
==== EDITOR e VISUAL ====
Queste variabili suggeriscono il comando da usare per avviare un [[editor di testo]] per modificare un [[file di testo]].
 
Valori tipici possono essere "<tt>vi</tt>", "<tt>emacsclient</tt>" o anche "<tt>gedit</tt>" (quest'ultimo in ambito [[GNOME]]).
 
==== ENV ====
Questa variabile indica il nome di uno [[script]] di shell da eseguire all'avvio della shell.
 
Valori tipici possono essere ad esempio "<tt>~/.bashrc</tt>" o "<tt>~/.kshrc</tt>".
 
==== http_proxy e ftp_proxy ====
Queste variabili indicano quale ''proxy server'' usare per connessioni [[HTTP]] e [[FTP]]. Ad esempio, in uno [[script]] di ''shell'':
# Proxy HTTP che richiede autenticazione
http_proxy="http://utente:password@proxy:8080"
export http_proxy
# Proxy HTTP che non richiede autenticazione
http_proxy="http://proxy:8080"
export http_proxy
 
==== LANG ====
Queste variabile specifica le impostazioni locali, come lingua da usare per l'interfaccia utente, convenzioni su formato di data e ora, rappresentazione dei numeri, codifica dei carattere in uso e altro ancora. Viene usata per specificare le impostazioni predefinite di sistema.
 
I valori possibili per <tt>LANG</tt> sono quelli elencati dal comando "<tt>locale -a</tt>", ad esempio "<tt>it_IT.UTF-8</tt>", o "<tt>C</tt>".
 
<tt>LANG</tt> è solo una delle variabili d'ambiente che controllano la localizzazione: ne esistono altre che trattano aspetti specifici (ad esempio <tt>LC_MONETARY</tt>, <tt>LC_MESSAGES</tt>, <tt>LC_NUMERIC</tt>) ed hanno precedenza su <tt>LANG</tt>. In particolare esiste anche <tt>LC_ALL</tt> che ha precedenza su tutte le altre (anche su <tt>LANG</tt>) e che può essere usata per specificare rapidamente l'uso di una localizzazione diversa da quella predefinita.
 
==== LD_LIBRARY_PATH ====
Nei sistemi che adottano [[Executable and linkable format|ELF]] come formato dei [[File eseguibile|file eseguibili]], indica al [[Linker|linker dinamico]] una serie di [[directory]] separate da due punti ("<tt>:</tt>") in cui cercare [[Libreria software|librerie software]] in aggiunta a quelle predefinite nel sistema.
 
==== LD_PRELOAD ====
Nei sistemi che adottano [[Executable and linkable format|ELF]] come formato dei [[File eseguibile|file eseguibili]], indica al [[Linker|linker dinamico]] una o più [[Libreria software|librerie software]] da precaricare, in aggiunta a quelle richieste dal programma.
 
Questo meccanismo è utile per usare librerie che ridefiniscono l'implementazione di funzioni standard, e che ad esempio possono permettere di accedere in maniera trasparente a file compressi o tenere traccia di tutte le allocazioni di memoria effettuate.
 
==== MANPATH ====
Specifica una serie di [[directory]] separate da due punti ("<tt>:</tt>") in cui cercare delle [[Man (Unix)|pagine man]], in aggiunta a quelle predefinite nel sistema.
 
==== PATH ====
Specifica una serie di [[directory]] separate da due punti ("<tt>:</tt>") in cui il sistema ricerca [[file eseguibile|file eseguibili]] quando essi non sono qualificati con alcuna directory.
 
Un valore tipico è "<tt>/bin:</tt>/usr/bin:/usr/local/bin</tt>", ma varia da sistema a sistema.
 
È da sottolineare che per motivi di sicurezza, nei sistemi [[Unix]] e [[Unix-like]] la directory corrente (rappresentata con un punto "<tt>.</tt>") non viene automaticamente inclusa tra quelle in cui effettuare la ricerca: se si vuole includerla, occorre specificarla esplicitamente nel valore di <tt>PATH</tt>.
 
==== TMPDIR ====
Specifica il nome di una [[directory]] da usare per file temporanei.
 
Normalmente non è impostata, in quanto le directory standard per i file temporanei sono già definite (ovvero <tt>/tmp</tt> e </tt>/var/tmp</tt>), tuttavia programmi che creano file temporanei di grosse dimensioni solitamente prendono in considerazione anche il valore di questa variabile prima di usare direttamente le directory standard.
 
==== TERM ====
Indica il tipo di [[Terminale (informatica)|terminale]] o [[terminale virtuale]] in uso, in modo che i programmi possano visualizzare correttamente la propria interfaccia a caratteri.
 
Valori tipici sono "<tt>xterm</tt>" e "<tt>vt100</tt>"
 
==== TZ ====
Specifica la regola da usare per convertire dalla data di sistema (mantenuta internamente in [[tempo coordinato universale]]) nella data e ora locali all'utente, e viceversa.
 
== Variabili d'ambiente in AmigaOS ==
Le variabili d'ambiente in [[AmigaOS]] sono condivise tra tutti i [[Processo (informatica)|processi]] ("''task''", nella terminologia AmigaOS).
 
Di fatto sono implementate come una serie di [[file]] memorizzati in un disco in memoria RAM accessibile tramite l'unità virtuale "<tt>ENV:</tt>", un file per ogni variabile d'ambiente, e manipolabili dall'utente tramite il comando <tt>setenv</tt>.<ref>{{cita web
|url=http://utilitybase.com/ref/?action=Search&funcgroup=AmigaDOS&keyword=SetEnv
|titolo=AmigaDOS/SetEnv
|accesso=25-05-2008
|lingua=en
}}</ref>
 
Per rendere le variabili d'ambiente persistenti tra un avvio e l'altro del sistema, i file corrispondenti possono essere copiati nell'unità virtuale "<tt>ENVARC:</tt>", che risiede su memoria di massa; all'avvio successivo il sistema provvede a ripristinare il contenuto di "<tt>ENV:</tt>" con i file presenti in "<tt>ENVARC:</tt>".
 
== Note ==
{{references}}
 
== Collegamenti esterni ==
* {{cita web
|url=http://vlaurie.com/computers2/Articles/environment.htm
|titolo=Environment Variables in Windows XP
|accesso=24-05-2008
|lingua=en
}}
* {{cita web
|url=http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap08.html
|titolo=Environment Variables
|accesso=25-05-2008
|opera=The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition
|lingua=en
}}
 
{{Portale|informatica}}
 
[[Categoria:Sistema operativo]]
 
[[bg:Променливи на средата]]