Variable d'environnement

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

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, etc.). Elles servent à communiquer des informations entre programmes qui ne se trouvent pas sur la même ligne hiérarchique, et ont donc besoin d'une convention pour se communiquer mutuellement leurs choix.

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

Sommaire

Affichage de la liste des variables d'environnement[modifier | modifier le code]

Sur DOS et Windows[modifier | modifier le code]

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 (NB : le rôle de ces variables est expliqué dans les paragraphes suivants).

Sur Unix[modifier | modifier le code]

  • env (commande)
La commande env sans aucun paramètre permet de lister les variables dites d’environnement.
  • set (instruction du shell)
Dans les shell 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[modifier | modifier le code]

Sur DOS et Windows[modifier | modifier le code]

Pour modifier une variable d’environnement (attention, cela ne fonctionne que sur le processus en cours)

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

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, 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[modifier | modifier le code]

Pour modifier une variable d’environnement (attention, cela ne marche que sur le processus en cours)

PATH=$PATH:./
  1. Si le processus en cours lance un autre processus (via un appel à la fonction fork), ce nouveau processus héritera des variables d’environnement mais pas des variables du shell. Une variable du shell peut devenir une variable d'environnement avec la commande export.
  2. 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 shell 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 shell (/etc/profile pour Bash).

Variable d’environnement Windows[modifier | modifier le code]

Paramètres liés au profil utilisateur[modifier | modifier le code]

%ALLUSERSPROFILE%[modifier | modifier le code]

Indique le répertoire du profil commun à tous les utilisateurs.

Exemple de valeurs :

‘’C:\Documents and settings\All Users’’

Attention : Ne pas confondre avec le profil par défaut

‘’C:\Documents and settings\Default User’’

%APPDATA%[modifier | modifier le code]

Exemple de valeurs :

‘’C:\Documents and settings\Dupont\Application Data’'

Il contient les données d’application de l’utilisateur connecté.

%HOMEPATH%[modifier | modifier le code]

Exemple de valeur

‘’\Documents and settings\Dupont’’

%USERNAME%[modifier | modifier le code]

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

%USERPROFILE%[modifier | modifier le code]

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

%CD%[modifier | modifier le code]

La variable %CD% n'est pas affichée par la commande set, elle donne le chemin du répertoire courant.

%COMPUTERNAME%[modifier | modifier le code]

Contient le nom de l’ordinateur.

%ComSpec%[modifier | modifier le code]

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

%DATE% et %TIME%[modifier | modifier le code]

Les variables %DATE% et %TIME% ne sont pas affichées par la commande set. Elles donnent la date et l'heure.

%ERRORLEVEL%[modifier | modifier le code]

La variable %ERRORLEVEL% n'est pas affichée par la commande set, elle donne le code retour de la dernière commande exécutée. C'est l'équivalent de la variable $? d'Unix.

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

Deux exemples de code

if errorlevel 2 goto no_such_file
IF ERRORLEVEL 2 SET CODE_ERREUR=2

Voir Syntaxe du errorlevel dans un batch.

%FP_NO_HOST_CHECK%[modifier | modifier le code]

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

%HOMEDRIVE%[modifier | modifier le code]

Valeur par défaut

C:

%LOGONSERVER% et %USERDOMAIN%[modifier | modifier le code]

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 :
‘’\\ctrl_dom’’
 %USERDOMAIN% indique le nom du domaine

Si l’utilisateur est connecté pour un groupe de travail (workgroup),

 %LOGONSERVER% et indique la même chose que %COMPUTERNAME%, précédé de ‘’\\’’. Exemple :
\\PCDupont
 %USERDOMAIN% indique la même chose que %COMPUTERNAME%

%NUMBER_OF_PROCESSORS%[modifier | modifier le code]

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

%OS%[modifier | modifier le code]

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

%PATHEXT%[modifier | modifier le code]

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

Variable d’environnement dont le nom commence par PROCESSOR_*[modifier | modifier le code]

Pour %PROCESSOR_ARCHITECTURE%, %PROCESSOR_IDENTIFIER%, %PROCESSOR_LEVEL%, %PROCESSOR_REVISION%, voir variables d’environnement positionnées par le gestionnaire de session (smss.exe).

%ProgramFiles%[modifier | modifier le code]

Cette variable d’environnement indique le chemin 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)%[modifier | modifier le code]

Cette variable d’environnement indique le chemin 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%[modifier | modifier le code]

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 (Path)
$N Lecteur courant seulement
$G Caractère supérieur « > » (Greater)
$L Caractère inférieur « < » (Less)
$D Date actuelle (Date)
$T Heure actuelle (Time)

Pour plus d'information, taper « help prompt ».

%RANDOM%[modifier | modifier le code]

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 15e puissance de 2 (32768).

%SystemDrive%[modifier | modifier le code]

Valeur par défaut

‘’C:’’

%SystemRoot%[modifier | modifier le code]

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[modifier | modifier le code]

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%[modifier | modifier le code]

À 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.

Les 2 répertoires de fichiers temporaires[modifier | modifier le code]

%TMP% et %TEMP% Un dossier de fichiers temporaire se trouve aussi le répertoire suivant. (XP)

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

%WinDir%[modifier | modifier le code]

Analogue à %SystemRoot%

Exemple :

‘’C:\Windows’'


Variables d’environnement Unix (ou gnu/linux)[modifier | modifier le code]

Sous Unix (ou GNU/Linux), les shells utilisent deux types de variables, utilisant la même syntaxe :

  • Des variables locales au shell,
  • Des variables d'environnement transmises aux applications lancées par le shell.

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[modifier | modifier le code]

Voir CFLAGS

Répertoires $HOME, $PWD, $OLDPWD, $TMPDIR[modifier | modifier le code]

  • 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 (en) TMPDIR

Infopath (pour Emacs)[modifier | modifier le code]

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[modifier | modifier le code]

Affichage des messages d'erreurs[modifier | modifier le code]

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[modifier | modifier le code]

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 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[modifier | modifier le code]

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[modifier | modifier le code]

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 :

 le_nom_du_binaire: error while loading shared libraries: libXX.so.0: cannot open shared object file: No such file or directory

Variable de X Window System (pour l'environnement graphique)[modifier | modifier le code]

  • $DISPLAY

Exemple de valeur :

:0.0
    • Le premier chiffre est le numéro de serveur X11
    • Le deuxième est le numéro de terminal
  • $TERM

Exemple de valeur :

xterm

Variables liées à GNOME (pour l'environnement graphique)[modifier | modifier le code]

$COLORTERM[modifier | modifier le code]

Exemple de valeur

gnome-terminal

$DESKTOP_SESSION[modifier | modifier le code]

Exemple de valeur :

default

$DESKTOP_STARTUP_ID[modifier | modifier le code]

$GDM_XSERVER_LOCATION et $GDMSESSION[modifier | modifier le code]

Voir GNOME Display Manager.

$GNOME_DESKTOP_SESSION[modifier | modifier le code]

Exemple de valeur :

Default

$GNOME_KEYRING_SOCKET[modifier | modifier le code]

Exemple de valeur :

/tmp/keyring-24TGGU/socket

Variables liées à KDE (pour l'environnement graphique)[modifier | modifier le code]

Variables liées à GTK+[modifier | modifier le code]

  • $GTK_DEBUG
  • $GTK_MODULES
  • $GTK_PATH
  • $GTK_IM_MODULE
  • $GTK_IM_MODULE_FILE
  • $GTK_RC_FILES
  • $GTK2_RC_FILES
  • $GTK_EXE_PREFIX
  • $GTK_DATA_PREFIX
  • $GDK_PIXBUF_MODULE_FILE
  • $GDK_DEBUG

$LC_ALL[modifier | modifier le code]

Voir i18n.

$POSIXLY_CORRECT[modifier | modifier le code]

Si la variable d'environnement $POSIXLY_CORRECT est définie, les commandes GNU/Linux se conformeront à la norme POSIX.

Par exemple, GNU grep se conformera à POSIX.2 si cette variable est définie.

Voir POSIX#Variable d'environnement POSIXLY CORRECT.

Variables liées à SSH[modifier | modifier le code]

  • $SSH_AGENT
  • $SSH_AUTH_SOCK

$LOGNAME, $USER et $USERNAME[modifier | modifier le code]

Contient la valeur du nom d'utilisateur de la session actuelle.

$SHELL[modifier | modifier le code]

$SHELL indique l'interpréteur shell utilisé par défaut. La valeur habituelle sous linux est /bin/bash (plus rarement /bin/sh).

Pour avoir la liste des shell sous Unix, voir catégorie:Shell Unix.

Autres variables[modifier | modifier le code]

Les variables autres que celles d'environnement[modifier | modifier le code]

Pour les variables internes, voir (en) Internal Variables.

Il existe des variables qui ne font pas partie des variables d'environnement. Par exemple, il peut y avoir :

  • Variables liées au shell
    • $BASH, $BASH_VERSINFO, $BASH_VERSION
  • $HISTFILE, $HISTFILESIZE et $HISTSIZE : paramètres de l'historique des commandes shell
    • $SHELLOPTS
  • $COLUMNS et $LINES' valeurs par défaut : 80 et 24 (c'est-à-dire 80 colonnes et 24 lignes)
  • $DIRSTACK
  • $EUID (UID effectif d'un processus)
REMARQUE : Il ne faut pas utiliser cette variable pour déterminer quel était le login initial (Pour cela, il faut utiliser la commande who am i, sans oublier les espaces.)
  • $GROUPS
  • Variables en rapport avec l'architecture logicielle ou matérielle
    • $HOSTTYPE ; exemple de valeur : i386
    • $MACHTYPE ; exemple de valeur : i386-pc-linux-gnu
    • $OSTYPE ; exemple de valeur : linux-gnu
  • $IFS Internal Field Separator
  • $MAILCHECK ; valeur par défaut : 60
  • $OPTERR et $OPTIND ; valeurs par défaut : 1
  • $PIPESTATUS
  • $PPID Parent Process IDentifier
  • Variables liées au prompt
    • $PROMPT_COMMAND
    • $PS1, $PS2 et $PS4

Variables d'environnement communes à Windows et Unix[modifier | modifier le code]

<PATH> pour l'emplacement des exécutables[modifier | modifier le code]

Wiktionnaire Pour une définition du mot « path », voir l’article path du Wiktionnaire.

La variable <PATH> contient la liste des répertoire(s) dans lesquels vont être recherchés les fichiers exécutables. On retrouve cette variable sous Windows (%PATH%) et sous Unix et Linux ($PATH).

Exemple[modifier | modifier le code]

Vous vous placez dans un répertoire quelconque de votre système (via la commande cd).

Si vous tentez de taper toto.exe dans la console (ou le terminal) il ne sera pas exécuté car /opt/toto/bin n'est pas dans le PATH.

Par contre, si vous tapez /opt/toto/bin/fichier_ex cela fonctionnera, mais c'est plutôt long à écrire.

Il est donc nécessaire d'ajuster la variable d'environnement PATH.

Sous Unix/Linux : $PATH[modifier | modifier le code]

Sous Unix et Linux, cette variable est utilisée seulement pour l'emplacement des exécutables (binaire ou script shell). Pour les bibliothèques logicielles, d'autres variables sont utilisées (exemple : $LD_LIBRARY_PATH).

Visualiser le $PATH[modifier | modifier le code]
echo $PATH

On peut aussi utiliser la commande :

printenv PATH
Séparateur de $PATH : ":"[modifier | modifier le code]

Le séparateur est le deux-points (:).

Modifier temporairement le $PATH[modifier | modifier le code]

Avec le shell bash

export PATH=$PATH:/opt/toto/bin

Cette modification n'est que temporaire (pour la session en cours).

Modifier le $PATH de manière permanente[modifier | modifier le code]

Il faut donc rendre permanente la modification du PATH en mettant la ligne suivante dans le fichier ~/.bashrc.

export PATH=$PATH:/opt/toto/bin
Le piège du répertoire courant[modifier | modifier le code]

Sous Unix, pour exécuter un fichier qui est dans le répertoire courant, on est en général obligé de préfixer la commande par « ./ », ce qui permet d'indiquer que le fichier est dans le répertoire courant.

Cette particularité étonne les utilisateurs qui ont l'habitude de Windows (ou de l'ancien MS-DOS) où on peut appeler directement un programme qui est dans le répertoire courant.

Cependant, il s'agit là d'une mesure de sécurité : à titre d'exemple, si un intrus malveillant parvient à placer un programme néfaste nommé ls dans le répertoire courant, ce programme sera exécuté dès que vous souhaiterez lister le répertoire (au lieu de la commande ls se trouvant normalement dans le répertoire /bin/, qui lui se trouve dans le PATH, mais qui n'est modifiable que par l'administrateur du système).

Si malgré tout l'utilisateur souhaite retrouver cette « ergonomie » de Microsoft, il faut qu'il rajoute le chemin « ./ » dans son PATH :

 PATH=$PATH:./
Le $PATH de base dans le profil[modifier | modifier le code]

La valeur de base de $PATH, pour tous les login, est défini dans le profil : fichier Shell /etc/profile.

Sous Mac OS X[modifier | modifier le code]

Visualiser le $PATH[modifier | modifier le code]

(En Bourne shell)

echo $PATH
Séparateur de $PATH : ":"[modifier | modifier le code]

Le séparateur est le deux-points (:).

Modifier temporairement le $PATH[modifier | modifier le code]
export PATH="$PATH:/opt/toto/bin"

Cette modification n'est que temporaire (pour la session en cours).

Modifier le $PATH de manière permanente[modifier | modifier le code]

Il faut rendre permanente la modification du PATH en rajoutant la ligne suivante dans le Profil utilisateur (c'est-à-dire le shell ~/.profile ou ~/.bash_profile selon le type de terminal vous utilisez).

export PATH="$PATH:/opt/toto/bin"

Il est aussi possible de modifier directement le PATH du fichier /etc/profile (il faut utiliser sudo ou être en root).

Sous Windows : %PATH%[modifier | modifier le code]

Sous Windows, si un exécutable n'est pas à l'emplacement[1] par défaut, la variable %PATH% indique dans quels répertoires le chercher.

Cette variable est paramétrée via la base de registre, dans la partie configuration de Session Manager (SMSS.EXE) (l'emplacement exact est : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\PATH)

Visualiser le %PATH%[modifier | modifier le code]

Dans une invite de commande, lancez la commande :

set path

ou

echo %PATH%
Séparateur de %PATH% : point-virgule[modifier | modifier le code]

Le séparateur est le caractère point-virgule : « ; ».

Modifier temporairement %PATH%[modifier | modifier le code]

Dans une invite de commande, utilisez

set PATH=%PATH%;c:\opt\toto\bin

Cette modification n'est que temporaire (pour l'invite de commande en cours).

Modifier le %PATH% de manière permanente[modifier | modifier le code]

Deux manières sont possibles :

1- Il faut modifier la variable d'environnement PATH : Panneau de configuration / Système / Avancé / Variables d'environnement / variables système : Variable Path ⇒ Modifier. Exemple : ajouter ;C:\Batch pour indiquer que Windows doit chercher dans C:\Batch pour trouver une application ou un .bat

2- Utiliser une commande MS-DOS (qui est plus pratique pour une utilisation dans un script). Voici un exemple d'utilisation :

→ Le but étant d'ajouter C:\Lotus\Notes à la variable d'environnement PATH de manière permanente.

 REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /d "%PATH%;C:\Lotus\Notes" /f

Options de REG ADD[2]

/f (force) permet d'éviter que le système vous demande si vous être sûr de votre modification.
/v (value) : indique la clé
/d (data) : indique la valeur de la clé

NB : Il est nécessaire de redémarrer la machine pour que le système prenne en compte la modification.

NB2 : Si vous exécutez à nouveau cette commande, alors après le redémarrage, vous aurez deux fois « ;C:\Lotus\Notes » dans votre path !

Variables d'environnement liées à Java[modifier | modifier le code]

JAVA_HOME[modifier | modifier le code]

Cette variable d'environnement n'est définie que si Java est installé sur l'ordinateur correspondant.

JAVA_HOME indique le répertoire contenant l'arborescence des fichiers nécessaires pour la machine virtuelle Java (classe, bibliothèques logicielles, etc.). Voir chargeur de classe Java.

Pour le cas particulier de Windows, voir variables d’environnement positionnées par le gestionnaire de session (smss.exe).

Autres variables liées à java[modifier | modifier le code]

Références[modifier | modifier le code]

  1. (en) Chemins pour trouver une DLL
  2. REG ADD sur le site Microsoft

Voir aussi[modifier | modifier le code]

Articles connexes[modifier | modifier le code]