En informatique, les variables d’environnement sont des variables dynamiques utilisées par les différents processus d’un système d’exploitation (Windows, Unix, Linux...).

Elles servent à communiquer des informations entre les programmes qui ne se trouvent pas sur la même ligne hiérarchique, et qui ont donc besoin d'une convention pour se communiquer mutuellement leurs choix.

On parle aussi de variables d'environnement CGI pour un serveur HTTP.

Affichage de la liste des variables d'environnement Sur DOS et Windows La commande SET sans aucun paramètre permet de lister la plupart des variables d’environnement.

Les variables %ERRORLEVEL%, %DATE%, %TIME%, %CD%, %RANDOM% ne sont pas affichées par la commande SET (Note : le rôle de ces variables est expliqué dans les paragraphes suivants).

Sur Unix env (commande) La commande env sans aucun paramètre permet de lister les variables dites d’environnement.

set (instruction du ) Dans les usuels d'Unix/Linux, l'instruction set permet d'afficher à la fois les variables d'environnement et les autres variables.

Modification d’une variable d’environnement Sur DOS et Windows Pour modifier une variable d’environnement, il faut saisir cette commande dans l'invite de commandes :

SET PATH=%PATH%;c:\WINDOWS\System32\wbem

Attention, cela ne fonctionne que sur le processus en cours.

Pour modifier une variable d'environnement d'une manière permanente :

sous MS-DOS et ses dérivés, il faut modifier le fichier AUTOEXEC.BAT pour y insérer la commande SET ci-dessus ; sous Windows NT et ses successeurs, il faut ajouter ou modifier la clé de registre HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment ou HKEY_CURENT_USER\Environment. Il est aussi possible de modifier les variables d'environnement sous l'objet système du panneau de configuration.

Sur Unix Pour modifier une variable d’environnement, il faut saisir : PATH=$PATH:./ Attention, cela ne marche que sur le processus en cours.

Si le processus en cours lance un autre processus (via un appel à la fonction ), ce nouveau processus héritera des variables d’environnement, mais pas des variables du . Une variable du peut devenir une variable d'environnement avec la commande export. La commande env permet de lancer un processus en positionnant des valeurs d’environnement. Exemple :

env LD_LIBRARY_PATH=/var/lib ./configure

Pour modifier une variable d'environnement de façon permanente, on peut ajouter une ligne dans le fichier d'initialisation de son shell (~/.bashrc pour Bash, ~/.zshrc pour Zsh)) pour assigner et exporter la variable.

Voici un exemple minimal de ~/.bashrc :

# Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # User specific aliases and functions export LANG=fr_CA.UTF8

Le script d'initialisation du est personnel à l'utilisateur.

Il est exécuté à chaque fois qu'on se connecte (soit directement soit par ssh) et à chaque fois qu'on ouvre une nouvelle console.

Pour que l'assignation de la variable profite à tous les utilisateurs, on peut l'ajouter (à condition d'avoir les droits) dans le fichier d'initialisation global du (/etc/profile pour Bash).

Variable d’environnement Windows Paramètres liés au profil utilisateur %ALLUSERSPROFILE% Indique le répertoire du profil commun à tous les utilisateurs.

Exemple de valeurs : C:\ProgramData ou C:\Documents and Settings\All Users Attention à ne pas confondre avec le profil par défaut : C:\Documents and Settings\Default User

%APPDATA% Contient les données d’application de l’utilisateur connecté.

Exemple de valeurs : C:\Users\Wikipedia\AppData\Roaming ou C:\Documents and Settings\Wikipedia\Application Data

%HOMEPATH% Exemple de valeurs : \Users\Wikipedia ou \Documents and Settings\Wikipedia

%USERNAME% %USERNAME% contient le nom de l’utilisateur connecté (exemple : Wikipedia).

%USERPROFILE%

%USERPROFILE% indique le chemin du répertoire contenant la ruche HKEY_CURRENT_USER de l’utilisateur connecté (fichiers NTUSER.DAT et NTUSER.INI).

%CD% La variable %CD% n'est pas affichée par la commande SET ; elle donne le chemin d'accès du répertoire courant.

%COMPUTERNAME% Contient le nom de l’ordinateur.

%ComSpec% Voir variables d’environnement positionnées par le gestionnaire de session (smss.exe).

%DATE% et %TIME% Les variables %DATE% et %TIME% ne sont pas affichées par la commande SET ; elles donnent la date et l'heure actuelle de l'ordinateur.

%ERRORLEVEL% La variable %ERRORLEVEL% n'est pas affichée par la commande SET ; elle donne le code d'erreur de la dernière commande exécutée (0 ou 1). C'est l'équivalent de la variable $? d'Unix.

C'est une commande indispensable pour faire des shell sophistiqués sous Windows (fichiers de commande : extension .bat).

Voici deux exemples de code : IF ERRORLEVEL 2 GOTO no_such_file IF %ERRORLEVEL% EQU 2 SET CODE_ERREUR=2 %FP_NO_HOST_CHECK% Voir variables d’environnement positionnées par le gestionnaire de session (smss.exe).

%HOMEDRIVE% Valeur par défaut : C:

%LOGONSERVER% et %USERDOMAIN% Si l’utilisateur est connecté pour un domaine, %LOGONSERVER% indique le nom du contrôleur de domaine utilisé pour l’authentification, précédé de "\\". Exemple : \\controle_domaine %USERDOMAIN% indique le nom du groupe de travail ou du domaine Windows auquel l'utilisateur actuel appartient.

Si l’utilisateur est connecté pour un groupe de travail (Workgroup), %LOGONSERVER% indique la même chose que %COMPUTERNAME%, précédé de "\\". Exemple : \\PC_Wikipedia %NUMBER_OF_PROCESSORS% Voir variables d’environnement positionnées par le gestionnaire de session (smss.exe).

%OS% Voir variables d’environnement positionnées par le gestionnaire de session (smss.exe).

%PATHEXT% Voir variables d’environnement positionnées par le gestionnaire de session (smss.exe).

Variable d’environnement dont le nom commence par PROCESSOR_* Pour les variables %PROCESSOR_ARCHITECTURE%, %PROCESSOR_IDENTIFIER%, %PROCESSOR_LEVEL% et %PROCESSOR_REVISION%, voir variables d’environnement positionnées par le gestionnaire de session (smss.exe).

%ProgramFiles%

Cette variable d’environnement indique le chemin d'accès du répertoire des programmes installés de Windows (voir Program Files).

Sa valeur par défaut est : C:\Program Files

La valeur de cette variable est paramétrée, dans la base de Registre, par la variable ProgramFilesDir dans la clé HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion.

%ProgramFiles(x86)%

Cette variable d’environnement indique le chemin d'accès du répertoire des programmes x86 installés de Windows 64 bits (voir Program Files).

Sa valeur par défaut est : C:\Program Files (x86)

%PROMPT%

Cette variable d'environnement permet de personnaliser l'invite affiché avant la saisie d'une commande.

Sa valeur par défaut est : $P$G

Elle peut contenir du texte à afficher combiné à des valeurs spéciales dont le code commence par le signe dollar « $ ».

Code Description $P Chemin courant () $N Lecteur courant seulement $G Caractère supérieur « > » () $L Caractère inférieur « < » () $D Date actuelle () $T Heure actuelle ()

%RANDOM% La variable %RANDOM% n'est pas affichée par la commande SET ; elle génère un nombre pseudo-aléatoire compris entre 0 et la de 2 (32768).

%SystemDrive% Cette variable indique la lettre du disque où est installé Windows.

Sa valeur par défaut est : C:

%SystemRoot% Cette variable d'environnement indique l'emplacement des fichiers systèmes.

Elle est paramétrée par la base de Registre : valeur SystemRoot dans la clé HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion.

Valeurs par défaut La valeur par défaut est : C:\Windows sous Windows Vista, 2008 et 7 C:\WINDOWS sous Windows XP et 2003. C:\WINNT. Pour les versions précédentes de Windows NT (de Windows NT 3.5 à Windows Server 2000).

Variables d'environnement basées sur %SystemRoot% À partir de %SystemRoot%, d'autres variables d'environnement peuvent être positionnées. Pour %PATH%, %COMSPEC%, %TEMP%, %TMP%, %WINDIR%, voir Les variables d'environnement créées par le gestionnaire de session.

Répertoires de fichiers temporaires %TMP% et %TEMP%. Un dossier de fichiers temporaires se trouve également dans le répertoire suivant (Windows XP) :

C:\Documents and Settings\nom_de_la_session\Local Settings\Temp

%windir% Analogue à %SystemRoot%

Exemple : C:\Windows

Variables d’environnement Unix (ou GNU/Linux) Sous Unix (ou GNU/Linux), les utilisent deux types de variables, utilisant la même syntaxe : Des variables locales au , Des variables d'environnement transmises aux applications lancées par le . Ces dernières sont accédées comme des variables locales et doivent être exportées avec la commande export (pour bash), ou utiliser la commande setenv (csh).

Exemple de variables d'environnement sous Unix :

CFLAGS et CXXFLAGS pour la compilation Voir CFLAGS

Répertoires $HOME, $PWD, $OLDPWD, $TMPDIR La variable $HOME contient le chemin absolu vers le répertoire personnel de l'utilisateur connecté. La variable $PWD contient le chemin absolu vers le répertoire courant (permet de savoir où on est dans l'arborescence). La variable $OLDPWD contient le chemin absolu vers le répertoire courant précédent (permet de savoir d'où on vient). Pour TMPDIR, voir TMPDIR

Infopath (pour Emacs) Infopath est une variable d'environnement utilisée par l'Éditeur de texte Emacs. Elle contient la liste des répertoires info.

$LANG et $LANGUAGE Affichage des messages d'erreurs La variable $LANG est utilisée par les différents programmes pour déterminer la langue des messages à afficher. Par exemple :

$ LANG=fr ls fff ls: fff: Aucun fichier ou répertoire de ce type $ LANG=en ls fff ls: fff: No such file or directory

Ces différentes traductions se trouvent dans les fichiers .mo des sous-répertoires de /usr/share/locale.

Il peut être intéressant de modifier cette variable pour obtenir un message d'erreur en anglais (par exemple, en exécutant la commande « export LANG=C »), puis de rechercher ce message d'erreur avec un moteur de recherche l'intérêt est d'avoir une liste de pages plus volumineuses que pour le message d'erreur en français et d'espérer trouver un diagnostic plus précis.

Affichage de l'éditeur de texte vim La variable $LANG sert aussi à vim pour déterminer l'encodage à utiliser. Supposons le fichier .txt contenant comme seule ligne « été » encodée en UTF-8. Pour éditer ce fichier avec vim dans la console il faut poser « export LANG=fr.UTF8 » et s'assurer que l'encodage de la console soit fixée à UTF-8 ( Configuration→Encodage).

Si l'encodage de la console est fixé à ISO/CEI 8859-1, vim affichera « été ». Si la variable $LANG ne précise pas l'encodage UTF-8, par exemple $LANG=fr, mais que l'encodage de la console est à UTF-8, vim affichera « été », mais la position du curseur ne suivra pas bien. En effet, bien que la console affiche trois caractères, vim en compte cinq (aller à la fin de la ligne avec « $ » placera le curseur trop loin).

Comparaison avec Windows Dans Windows, la langue se paramètre avec la base de registre, dans le HKEY_CURRENT_USER, plus exactement dans certaines des sous-clés de ControlPanel\international (l'outil pour le paramétrer est intl.cpl).

$LD_LIBRARY_PATH La variable $LD_LIBRARY_PATH contient une liste de répertoires, séparés par des :, où se trouvent les bibliothèques qui ne sont pas installées dans les répertoires par défaut ( /usr/lib et /usr/local/lib n'ont pas à être indiqués dans $LD_LIBRARY_PATH ).

Lors de l'exécution d'une application liée dynamiquement à une bibliothèque, la bibliothèque est d'abord recherchée dans les répertoires par défaut, puis dans les répertoires énumérés dans la variable $LD_LIBRARY_PATH en ordre d'apparition.

Si la bibliothèque n'est pas trouvée, un message d'erreur semblable à celui-ci sera lancé lors de l'exécution :