A partir de vos indications et d'autres recherches sur le Net, j'ai fait une petite synthèse qui pourra servir à d'autres.
Les fichiers gérant les variables d'environnement au niveau de la session :
.bashrc
.bash_profile
.profile
Pour visualiser les variables d'environnement:
Pour examiner une valeur particulière :
Distinguer shell interactifs et shell non-interactifs. Un script est lancé dans un shell non-interactif
Les variables d'environnement ont une portée locale. Ainsi une variable déclarée dans un shell ne sera valide que pour ce shell et ses enfants (mais pas pour un sous-shell non interactif, comme celui lancé par un script notamment).
Ex:
si je définis la variable
1 2
| variable="test"
echo "$variable" |
ne renverra test que dans le shell courant
Si l'on crée le script test.sh avec pour contenu
1 2
| #!/bin/bash
echo "$variable" |
L'exécution du script renverra une valeur vide puisque le script s'est exécuté dans un shell non-interactif.
En revanche, si je définis la variable
lorsque je lance un éditeur de texte depuis ce terminal, il se lancera en langue anglaise. Il y a bien héritage.
Pour qu'une variable ait une porté générale, il faut l'exporter par
N'importe quel shell (sauf un shell non-interactif, comme après lancement d'un script) aura accès à la valeur.
Cette valeur sera perdue après la fermeture de la session.
Pour disposer de cette valeur de manière permanente au niveau de la session, il faut l'inscrire dans un des fichiers d'environnement .bashrc, .bash_profile, .profile
Usage de ces différents fichiers (repris depuis doc.ubuntu-fr.org)
- ~/.profile - C'est probablement le meilleur endroit pour placer une définition de variable d'environnement. En effet, il est exécuté automatiquement par le gestionnaire de connexion lors du démarrage d'une session graphique, mais aussi lors du démarrage d'une session en mode console texte.
~/.bash_profile ou ~/.bash_login - Si l'un de ces fichiers existe, il sera exécuté par Bash préférentiellement à ~/.profile lors d'une connexion sur une console. (Bash utilisera ~/.bash_profile de préférence à ~/.bash_login). Cependant, ces fichiers n'auront par défaut aucune influence sur une session en mode graphique.
- ~/.bashrc - Du fait de la manière dont Ubuntu configure par défaut les divers fichiers de scripts, c'est sans doute l'endroit le plus facile pour définir des variables. La configuration par défaut garantit a peu près que ce fichier sera exécuté à chaque invocation de *bash* ainsi que lors de la connexion à l'environnement graphique. Cependant du point de vue des performances, ce n'est pas l'idéal car les variables seront inutilement redéfinies à chaque fois. (NdT : à chaque fois que vous ouvrez un terminal par exemple?)
Comment définir des variables qui seront accessibles depuis des shell non-interactifs (donc des scripts) ?
On peut créer un script contenant les variables et leurs valeurs par exemple :
.variables.sh
Dans les scripts, on pourra accéder à ces valeurs en inscrivant dans le script la commande
source $HOME/.variables.sh
ou
Il est possible d'inscrire le chemin vers ce fichier dans la variable BASH_ENV, par exemple dans .profile
export BASH_ENV=$HOME/.variables.sh
Dès lors je peux y faire appel dans les scripts par
Merci de corriger les éventuelles erreurs et imprécisions.
.
Partager