next up previous contents Next: Courriel Up: Processus et variables d'environnement. Previous: Consommation mémoire et CPU:   Table des matières  

10.9 Environnement des processus.

Chaque processus en cours d'exécution connaît des expressions littérales du type var=value. Ceci signifie qu'un processus peut prendre en compte la valeur de certains paramètres ou variables qu'il peut avoir hérité de son processus-parent. La liste complète des expressions littérales telles que var=value constitue l'environnement d'un processus et chaque paramètre var est une variable d'environnement. Chaque processus a son environnement, copie de l'environnement du processus-parent.

Après que vous vous soyez connecté et que vous ayez obtenu une invite de shell, le processus que vous avez utilisé (le shell lui-même) s'est comporté comme tout autre processus, c'est-à-dire qu'il a commencé à utiliser un environnement et les variables qui constituent ce dernier. Pour obtenir une liste complète de ces variables, tapez:

set 


La commande qui suit est utile pour trouver la valeur d'une variable dont vous n'êtes pas sûr du nom:

set | grep <expr_reg> 


Essayez set | grep PATH pour connaître la variable d'environnement PATH que nous avons vu à la section 5.18.

Le but d'un environnement est essentiellement de fournir un moyen alternatif pour passer des paramètres à un programme (alternatif veut dire: ``en plus des arguments passés en ligne de commande''). La différence est qu'un environnement est transmis d'un processus au suivant: par exemple, un shell peut disposer d'un jeu de variables d'environnement et exécuter un gestionnaire de fichiers, qui à son tour exécute un traitement de texte. Le traitement de texte hérite son environnement du gestionnaire de fichier qui, lui-même, hérite son environnement du shell. Si, par exemple, vous avez placé une variable PRINTER dans le shell, celle-ci sera transmise jusqu'au traitement de texte. Cette technique n'oblige plus à configurer séparément l'imprimante que le traitement de texte doit utiliser.

Testez:

X="Bonjour à tous"

echo $X 



Vous avez défini une variable X. A présent, lancez un second bash:

bash 


Vous venez de créer un processus-fils appartenant au processus (le premier bash) dans lequel vous étiez. Tapez:

echo $X 


Vous constaterez que X n'est pas une variable d'environnement du second bash dans lequel vous vous trouvez maintenant. La raison en est que la variable X n'a pas été exportée comme variable d'environnement. De ce fait, elle n'a pas été transmise. Tapez maintenant:

exit 


qui vous ramène au processus-parent (le premier bash). A présent, exécutez les commandes suivantes:

export X

bash

echo $X 



Vous pouvez constater que le nouveau bash connaît X.

Nous venons de fixer une variable arbitraire pour notre convenance personnelle. bash, comme beaucoup d'autres programmes, fixe automatiquement ses propres variables d'environnement. La page de man de bash affiche ces variables. Lorsqu'on parle de désactivation (unsetting) d'une variable, cela signifie qu'il faut utiliser la commande unset <variable>. Il est possible que, pour l'instant, certaines variables vous soient encore très peu familières; cependant, nous en avons fait la liste parce que nous en aurons besoin à l'avenir.

Ce qui suit est un extrait de la page de man de bash. Vous verrez que les variables appartiennent à deux catégories: celles qui fournissent une information spéciale et sont lues sans être fixées et celles qui configurent le comportement du shell (ou d'autres programmes) et qui peuvent être établies à tout instant. [Merci à Brian Fox et Chet Ranney. (annotation de P. Sheer)

Variables du shell. [NdT: la traduction française est inspirée de la traduction de la page de man bash, réalisée par Christophe Blaess en 1997 (cette dernière a été réactualisée par Thierry Vigneaud en 1999-2001).]

PPID
représente le PID du shell-parent (variable protégée en écriture);

PWD
est associée au répertoire de travail courant tel que configurée par la commande cd;

OLDPWD
est associée au répertoire de travail précédent telle que définie par la commande cd;

REPLY
contient la ligne d'entrée lue par la commande interne read quand aucun argument n'est fourni;

UID
contient l'UID de l'utilisateur courant, et est initialisée au démarrage du shell;

EUID
contient l'ID de l'utilisateur effectif associé à l'utilisateur courant, initialisé au démarrage du shell;

BASH
contient le nom complet du chemin utilisé pour invoquer l'instance de bash en cours;

BASH_VERSION
correspond au numéro de version de l'instance du bash en cours;

SHLVL
(Shell Level) est incrémentée d'une unité, à chaque invocation d'une session de bash;

RANDOM
chaque fois que ce paramètre est référencé, un entier aléatoire est produit. La séquence des nombres entiers aléatoires peut être initialisée en attribuant une valeur à RANDOM. Si RANDOM est inutilisée (usage de la commande unset), elle perd ses propriétés spéciales, même si elle est ultérieurement réinitialisée;

SECONDS
chaque fois que ce paramètre est lu, le nombre de secondes écoulés depuis l'appel du shell est renvoyé. Si une valeur est conférée à SECONDS, la valeur retournée pour des attributions ultérieures sera le nombre de secondes depuis l'attribution ``plus'' la valeur conférée initialement. Si SECONDS n'est pas initialisée, elle perd ses propriétés spéciales, même si elle est ultérieurement réinitialisée;

LINENO
chaque fois que ce paramètre est référencé, le shell le remplace par un nombre décimal représentant le numéro de ligne courante (commençant à 1) dans le script ou la fonction. Lorsqu'il ne s'agit pas d'un script, il n'est pas garanti que la valeur remplacée ait un sens. Lorsqu'il s'agit d'une fonction, la valeur n'est pas le numéro de la ligne du fichier-source où la commande apparaît (cette information est perdue dès que la fonction est exécutée), mais bien une approximation du nombre de commandes simples exécutées dans le corps de la fonction en cours. Si LINENO est détruite (par unset), elle perd ses propriétés spéciales, même si elle est ultérieurement réinitialisée (c'est-à-dire recréée);

HISTCMD
c'est le numéro (ou rang) d'une commande dans l'historique. Si HISTCMD est détruite, elle perd ses propriétés spéciales, même si elle est ultérieurement recréée;

OPTARG
est la valeur du dernier argument traité par la commande interne getopts (voir COMMANDES INTERNES DU SHELL, ci-dessous);

OPTIND
est l'indice du prochain argument, que doit traité la commande internegetopts (voirCOMMANDES INTERNES DU SHELL, ci-dessous);

HOSTTYPE
est automatiquement rempli par une chaîne qui décrit de manière univoque le type de machine sur laquelle bash est en train d'être exécuté. La valeur par défaut dépend du système;

OSTYPE
est automatiquement rempli par une chaîne qui décrit le système d'exploitation sur laquelle bash est en train d'être exécuté. La valeur par défaut est fonction du système.

IFS
est le Séparateur de Champ Interne (Internal Field Separator) qui est utilisé pour séparer les mots après une développement (ou expansion) et pour découper les lignes en mots avec la commande interne read. La valeur par défaut est ``

PATH
définit le chemin de recherche des commandes. C'est une liste de répertoires séparée par des doubles points (:), que le shell parcourt pour rechercher les commandes (voir COMMAND EXECUTION ci-dessous). Le chemin par défaut dépend du système, et de la configuration choisie par l'administrateur qui installe le bash. Une valeur commune est ``/usr/gnu/bin:/usr/local/bin:/usr/ucb:/usr/bin:/'';

HOME
définit le répertoire personnel de l'utilisateur courant; c'est l'argument par défaut de la commande interne cd;

CDPATH
est le chemin de recherche pour la commande cd. C'est une liste séparée des double points (:), de répertoires dans lequel le shell recherche les répertoires de destination spécifiés par la commande cd. Une valeur typique est ``.:~:/usr'';

ENV
si ce paramètre est fixé quand le bash exécute un script de shell, sa valeur est considérée comme un nom de fichier contenant les commandes pour initialiser le shell, comme dans .bashrc. La valeur de ENV est soumise au remplacement de paramètres, la substitution de commandes et l'évaluation (ou expansion) arithmétique avant d'être interprétée comme un nom de chemin. PATH n'est pas utilisé pour rechercher le fichier obtenu.

MAIL
si ce paramètre correspond à un nom de fichier et que le variable MAILPATH n'est pas configurée, bash informe l'utilisateur de l'arrivée d'un courrier dans le fichier indiqué.

MAILCHECK
souvent exprimée en secondes, cette variable spécifie quand le bash doit vérifier l'arrivée de courriels. La valeur par défaut est de 60 s. Lorsqu'il est temps est écoulé, le shell vérifie l'arrivée de courriel avant de répondre par le symbole d'accueil. Si la variable est supprimée, le shell n'autorise pas le relevé du courriel.

MAILPATH
consiste en une liste (séparée par des double-points) de chemins qui doivent être parcourus pour le relevé du courriel. Le message qui doit être affiché en cas de courriel peut être indiqué en séparant le nom du chemin et le message à l'aide du motif '?'. Le motif $_ indique le nom du fichier de messages. Exemple:
MAILPATH='/usr/spool/mail/bfox?'':~/shell-mail?''$_has mail'''. Bash fournit une valeur par défaut pour cette variable, mais la localisation des fichiers de courriel ''boîte-à-lettres'' d'un utilisateur qu'elle emploie dépendant du système (à titre d'exemple: /usr/spool/mail/$USER).

MAIL_WARNING
si cette variable est créée, et qu'un fichier (que le bash vérifie pour le courriel) a été consulté, le message ``The mail is in mailfile has been read'' est affiché.

PS1
La valeur de ce paramètre est developpée (voir PROMPTING ci-dessous) pour être utilisée comme la chaîne d'accueil principale. La valeur par défaut est ``bash''$'' .

PS2
La valeur de ce paramètre est développée pour être utilisée comme chaîne d'accueil secondaire. La valeur par défaut est ``>''.

PS3
La valeur de ce paramètre est utilisée comme symbole d'accueil de la commande select (voirSHELL GRAMMAR ci-dessus).

PS4
La valeur de ce paramètre est developpée et affichée avant que chaque commande bash ne soit affichée durant un suivi d'exécution. Le premier caractère de PS4 est reproduit autant de fois que nécessaire pour indiquer les différents niveaux d'imbrication. Par défaut, le caractère est ``+''.

HISTSIZE
est le nombre de commandes à mémoriser dans l'historique de commandes (voir HISTORY ci-dessous). La valeur par défaut est 500.

HISTFILE
est le nom du fichier dans lequel l'historique des commandes est sauvegardé (voir HISTORY ci-dessous). La valeur par défaut est ~/.bash_history. Si cette variable est détruite, l'historique de commandes n'est pas sauvé à la fin d'un shell interactif.

HISTFILESIZE
représente le nombre maximum de lignes contenues dans l'historique. Quand une valeur est attribuée à cette variable, le fichier d'historique est tronqué, si nécessaire, pour ne pas contenir davantage que ce nombre de lignes. La valeur par défaut est 500.

OPTERR
Si cette variable est posée à 1, bash montre les messages d'erreurs produits par la commande interne getopts (voir SHELL BUILTIN COMMANDS ci-dessous). OPTERR est initialisée à 1 chaque fois que le shell est invoqué ou qu'un script de shell est exécuté.

PROMPT_COMMAND
Si cette variable est initialisée, elle est exécutée en tant que commande avant d'émettre chaque invite principale.

IGNOREEOF
contrôle le comportement du shell à la réception d'un caractère EOF (end of file) comme unique entrée. Lorsque cette variable est initialisée, la valeur qu'elle contient est le nombre de caractères EOF consécutifs apparaissant comme caractère initial d'une ligne, que bash ignore avant de se terminer. Si la variable existe sans avoir de valeur numérique, ou tout autre valeur, la valeur par défaut sera fixée à 10. Si la variable n'existe pas, EOF signifie la fin de saisie dans le shell. Seuls les shells intéractifs sont concernés.

TMOUT
si cette variable contient une valeur positive, celle-ci est interprétée comme le nombre de secondes qu'il faut attendre pour toute entrée après l'affichage de l'invite principale. Sil n'y a pas d'entréeavant la fin de ce délai, Bash se terminera.

FCEDIT
est l'éditeur par défaut utilisé par la commande interne fc.

FIGNORE
est une liste (séparée par des double-points (:)) de motifs (suffixes) à ignorer lors de la complétement de nom de fichiers (voir READLINE ci-dessous). Un nom de fichier dont le suffixe correspond à une des entrées dans FIGNORE est exclus de la liste des noms de fichiers. Une valeur-type est ``.o:~''.

INPUTRC
est le nom de fichier pour la configuration de readline. Il prévaut sur la valeur par défaut de ~/.inputrc (voir READLINE ci-dessous).

notify si la valeur existe, le bash affiche un rapport dès qu'une tâche en arrière-plan est terminée. Sinon, il attendra l'affichage de la prochaine invite principale (voir aussi l'option -b de la commande interne set).

history_control
 

HISTCONTROL
si cette variable contient la valeur ignorespace, les lignes commençant par le caractère espacement (space) ne sont pas conservées dans l'historique. Si la valeur est ignoredups, la ligne correspondant à la dernière ligne de l'historique ne sera pas mémorisée. La valeur ignoreboth combine les deux comportements. Si la variable est détruite, ou si toute autre valeur que les trois précitées lui est attribuée, toutes les lignes lues par l'interpréteur sont sauvées dans l'historique.

command_orientated_history
si cette variable est créée, bash tente de sauver toutes les lignes des commandes multi-lignes sous une même entrée dans l'historique. Ceci facilite la réédition de commandes sur plusieurs lignes.

glob_dot_filenames
Si cette variable est activée, le bash inclut les noms de fichiers commençant par un ``.'' lors complètement des nom de chemin (pathname).

allow_null_glob_expansion
Si cette variable est activée, le bash permet aux motifs des noms de chemin ne correspondant à aucun fichier d'être complétés par une chaîne nulle plutôt que par leur propre valeur (voir Pathname expansion ci-dessous).

histchars
ce sont les deux ou trois caractères qui contrôlent le complètement de l'historique et le découpage en éléments lexicaux (voir HISTORY EXPANSION ci-dessous). Le premier caractère est le caractère de complètement de l'historique, c'est-à-dire le caractère qui signale le début du complètement de l'historique, normalement ``!''. Le second caractère ou caractère de substitution rapide (quick substitution) est utilisé comme abrégé pour exécuter à nouveau la commande précédemment entrée, en subsitutant une chaîne par une autre dans la commande. La valeur par défaut est ``^''. Le troisième caractère est optionnel et indique que le reste de la ligne est un commentaire lorsqu'il précède un nom (normallement il s'agit de ``#''). Le caractère de commentaire de l'historique produit un saut vers les mots suivants d'une ligne. Il n'induit pas nécessairement l'interpéteur synatxique du shell à traiter le reste d'un ligne comme un commentaire.

nolinks
si cette variable est activée, le shell ne suit pas les liens symboliques lors des exécutions de commandes qmodifiant le répertoire de travail courant. Au lieu de cela, elle permet d'utiliser la structure physique du répertoire. Par défaut, le bash suit la chaîne des répertoires lorsqu'il exécute des commandes modifiant le répertoire courant, telles quecd. Voir aussi la description de l'option -P de la commande interne set (SHELL BUILTIN COMMAND ci-dessous).

hostname_completion_file
 

HOSTFILE
contient le nom d'un fichier dans le même format que /etc/hosts qui devrait être consulté par le shell lorsqu'il doit compléter un nom d'hôte. Ce fichier peut être modifié interactivement; au complétement de nom d'hôte (hostname) à la suite de la modification, bash ajoute le contenu du nouveau fichier à sa base de données existante.

noclobber
si cette variable est activée, le bash n'écrase pas le contenu d'un fichier existant lorsque les opérateurs de redirection >, >& et <> sont utilisés. Cette variable peut être annulée lors de la création de fichiers de sortie en utilisant l'opérateur de redirection > - au lieu de > (voir aussi l'option -C de la commande interne set).

auto-resume
cette variable contrôle la manière dont le shell interagit avec un utilisateur et le contrôle des tâches. Si cette variable existe, les commandes simples (en un seul mot) sans redirections sont traitées comme des candidats pour la reprise d'une tâche existante mais arrêtée. Il n'y a pas d'ambiguïté permise: s'il y a plus d'une tâche commençant avec la chaîne saisie, le choix se porte sur celle d'accès le plus récent. Dans ce contexte, le nom (name) de la tâche arrêtée est la ligne de commande utilisée pour son démarrage. Si la variable est posée à exact, la chaîne fournie doit correspondre exactement au nom d'une tâche arrêtée; si la valeur est substring, la chaîne doit correspondre à une sous-chaîne du nom de la tâche arrêtée. La valeur substring fournit une fonctionnalité analogue à l'id de job %? (voir le JOB CONTROL ci-dessous). Si la valeur est autre, la chaîne fournie doit être le préfixe du nom d'une tâche arrêtée; ceci fournit une fonctionnalité analogue à l'id de job %.

no_exit_on_failed_exec
si cette variable existe, un shell non-interactif ne se terminera pas s'il ne peut exécuter le fichier spécifié dans la commande interneexec. Un shell interactif ne se termine pas si exec échoue.

cdable_vars
si cette variable est activée, un argument de la commande interne cd qui ne serait pas un répertoire sera considéré comme le nom d'une variable dont le contenu est le répertoire à modifier.


next up previous contents Next: Courriel Up: Processus et variables d'environnement. Previous: Consommation mémoire et CPU:   Table des matières  
1-01-2006