environ - Environnement de l'utilisateur.
La variable
environ
pointe sur un tableau de chaînes que l'on nomme `environnement'.
(Cette variable doit être déclaré dans les programmes utilisateurs,
mais elle est présente dans
unistd.h
si le fichier d'en-tête provient de libc4 ou libc5, ou encore
de glibc si la variable
_GNU_SOURCE
est définie.)
Ce tableau de chaînes de caractères qui est fourni à
exec(3)
quand un processus démarre. Par convention ces chaînes ont la forme
`
nom=valeur'.
Des exemples classiques sont :
- USER
-
Le nom de l'utilisateur connecté (utilisé par des programmes de style BSD).
- LOGNAME
-
Le nom de l'utilisateur connecté (dans les programmes de style Système V).
- HOME
-
Le répertoire de login d'un utilisateur, mis en place par
login(1)
depuis le fichier des mots de passe
passwd(5).
- LANG
-
Le nom du lieu à utiliser pour les configurations locales,
s'il n'est pas écrasé par LC_ALL ou d'autres variables comme
LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY,
LC_NUMERIC, LC_TIME, cf.
locale(5).
- PATH
-
Une liste de préfixes de répertoires, que
sh(1)
et de nombreux autres programmes utilisent pour trouver un
fichier dont le chemin est incomplet.
Les préfixes sont séparés par des `:'.
(De même il existe CDPATH utilisé par certains shells pour
connaître le répertoire destination d'une commande cd,
MANPATH utilisé par man(1) pour trouver les pages de
manuel, etc...)
- PWD
-
Le répertoire de travail actuel, renseigné par certains shells.
- SHELL
-
Le nom de fichier du shell à la connexion de l'utilisateur.
- TERM
-
Le type de terminal utilisé pour les affichages.
- PAGER
-
L'application préférée de l'utilisateur pour afficher des textes (comme
less(1)).
- EDITOR/VISUAL
-
L'application préférée de l'utilisateur pour éditer des textes.
- BROWSER
-
L'utilitaire préféré pour examiner des URLs. Une suite de noms de navigateurs
séparés par des deux-points. Voir http://www.tuxedo.org/~esr/BROWSER/ .
D'autres noms peuvent être inscrits dans l'environnement par
la commande
export avec la syntaxe `nom=valeur'
sous
sh(1),
ou par la commande
setenv avec
csh(1).
Des arguments peuvent aussi être insérés dans l'environnement lors
d'un
exec(2).
Un programme C peut manipuler l'environnement en utilisant les fonctions
getenv(),
putenv(),
setenv(),
et
unsetenv().
Remarquez que le comportement de nombreux programmes ou routines
de bibliothèque est influencé par la présence, ou par la valeur
de certaines variables d'environnement. En voici quelques exemples :
Les variables
LANG,
LANGUAGE,
NLSPATH,
LOCPATH,
LC_ALL,
LC_MESSAGES,
etc. influencent la localisation.
TMPDIR
modifie le préfixe de chemin d'accès des fichiers crées par
tmpnam() et consort, les répertoires temporaires de
sort(1) ou d'autres programmes.
LD_LIBRARY_PATH,
LD_PRELOAD
et les autres variables LD_* modifient
le comportement du chargeur/éditeur de liens dynamique.
POSIXLY_CORRECT
oblige certains programmes ou routines à respecter
scrupuleusement le standard POSIX.
Le comportement de
malloc(3) est influencé par les variables
MALLOC_*.
La variable
HOSTALIASES
fournit le nom du fichier d'alias consulté
par
gethostbyname().
TZ et
TZDIR
gèrent les informations sur les fuseaux horaires utilisées par
tzset(3)
et donc par les fonctions comme
ctime(),
localtime(),
mktime(),
strftime().
Voir
tzselect(1).
TERMCAP
donne des indications sur la manière de traiter le terminal
(ou donne le nom d'un fichier contenant ces spécifications).
COLUMNS " et " LINES
indiquent aux applications la taille de la fenêtre, éventuellement avec
préséance sur la taille réelle.
PRINTER ou
LPDEST
indiquent l'imprimante à utiliser. Voir
lpr(1).
Etc.
Il est clair qu'il y a ici un risque concernant la sécurité. De nombreuses
commandes système peuvent être induites en erreur par un utilisateur
qui fournirait des valeurs particulières pour
IFS ou LD_LIBRARY_PATH.
Il y a aussi un risque de pollution de l'espace des noms.
Des programmes comme
make
et
autoconf
permettent la surcharge des noms d'utilitaires par défaut par des variables
d'environnement avec le même nom en majuscule.
Ainsi on peut employer
CC
pour sélectionner un compilateur C (et de même
MAKE,
AR,
AS,
FC,
LD,
LEX,
RM,
YACC,
etc.).
Toutefois dans certains cas, ces variables fournissent des paramètres à
certains programmes plutôt qu'un nom d'utilitaire. Ainsi il existe
MORE,
LESS,
ou
GZIP.
De telles utilisations sont considérées comme des erreurs et doivent être
évitées dans les nouveaux programmes. Les auteurs de
gzip
par exemple, devraient penser à renommer leur option
GZIP_OPT.
Christophe Blaess, 1996-2003.