Les variables d'environnement
Lire et définir des variables d’environnement dans le shell.
Objectifs
À la fin de cette leçon, vous saurez :
- lister les variables d'environnement d'une session ;
- lire une variable précise ;
- exposer une variable dans une commande ou un sous-processus ;
- comprendre pourquoi le shell est le maillon de transmission.
🔗 Pour vous rafraîchir la mémoire : lecture de fichiers et aide (cat, grep, man) · redirections et pipes
Qu'est-ce qu'une variable d'environnement ?
Une variable d'environnement est une paire NOM=VALEUR que le système attache à chaque processus. Elle transmet du contexte de travail à un programme, sans modifier son code :
shell
↓
environnement du processus (les variables partagées)
↓
Node
↓
process.env
Lister
env
La machine sort ici une liste longue : PATH, HOME, USER, LANG... Ce sont des valeurs posées avant le démarrage du processus, stockées dans une table que le programme peut lire telle quelle.
printenv USER
printenv est le plus direct : il affiche la valeur d'une variable précise.
Lire une variable dans le shell
echo "$HOME"
echo "$USER"
echo "$PATH"
Entre guillemets doubles, $NOM est remplacé par sa valeur. Avec simples, le $ n'est pas interprété :
echo '$HOME' # affiche littéralement $HOME
La différence est fondamentale : $NOM est une substitution, pas un texte.
Définir une variable
Deux formes qui ne font pas la même chose :
export MA_VARIABLE="valeur"
NON_EXPORTER="à moitié"
Différence entre les deux
exportrend la variable disponible à tous les processus lancés à partir du shell courant (et à leurs enfants).- Sans
export, la variable existe seulement pour le shell courant et les constructions internes ; les programmes enfant ne la voient pas.
export APP_NAME="cours"
env | grep APP_NAME
Transmettre au programme
NODE_OPTIONS=--trace-warnings node mon-script.js
La variable est attachée juste au processus de la commande, sans polluer le shell pour la suite de la session.
Exercice
- Affichez
$USERpuis$HOMEet vérifiez le résultat avecprintenv. - Créez une variable
MA_VARnon exportée, vérifiez son affichage avececho, puis cherchez-la dansenv: que se passe-t-il ? - Exportez
MA_VAR, et relisez-la dans un sous-interpréteur avecbash -c 'echo $MA_VAR'. - Affichez la valeur
PATH, puis identifiez le répertoire qui contientnode. - Supprimez la variable de la session avec
unset MA_VARet vérifiez son absence.
Résumé
- L'environnement est une table de variables attachée au processus.
envliste,printenv NOMlit,echo "$NOM"affiche.exportrend une valeur aux futurs processus ; sinon elle reste locale.- Les variables d'environnement sont l'une des façons de configurer un programme : la valeur vient de l'extérieur, sans toucher au code.
Correction disponibleCherchez d’abord par vous-même.Voir la correction
Correction
Réponses détaillées
Exercice 2. echo s'exécute dans le shell lui-même : MA_VAR y est connue et s'affiche. Dans env, la variable n'apparaît pas : les programmes enfants ne reçoivent que les variables exportées. C'est pour cela qu'on n'écrit pas export par défaut : on n'expose que ce qui doit l'être.
Exercice 3.
export MA_VAR="test"
bash -c 'echo $MA_VAR'
Le sous-interpréteur (un nouveau processus) reçoit l'environnement complet du shell parent, y compris la variable exportée.
Exercice 4.
printenv PATH
which node
which cherche dans les répertoires de PATH : c'est pourquoi node répond même si vous êtes loin de son dossier.
Exercice 5.
unset MA_VAR
echo "$MA_VAR"
echo affiche une valeur vide : la variable n'existe plus. L'environnement d'un processus est une minuscule table de configuration : tout s'y passe par paires nom/valeur.