Voici un extrait de la page de manuel de Bash :
export [-fn] [nom[=mot]] ...
exporter -p
Les noms fournis sont marqués pour l'exportation automatique vers l'environnement des commandes exécutées ultérieurement. Si l'option -f est donnée, les noms font référence aux fonctions...
Si vous n'avez besoin de la variable que dans l'environnement actuel, il n'est pas nécessaire d'utiliser l'exportation.
var=value
Modifier :
Sans exportation :environnement actuel uniquement. Avec export :environnement courant et environnements enfants.
Voici une démonstration de l'effet de l'exportation sur la disponibilité d'une variable dans un environnement enfant et que les modifications apportées à l'environnement enfant n'affectent pas le parent :
$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
Après le premier écho (echo "parent..."
) vous voyez "123" et "456" car les deux var1
et var2
sont actifs dans l'environnement actuel. Vous ne voyez pas de valeur pour var3
car il n'est pas encore défini.
Après la ligne qui commence "var3=...
" vous ne voyez pas de valeur pour var1
car il n'a pas été exporté. Vous faites voir une valeur pour var2
parce que c'était exporté. Vous voyez une valeur pour var3
car il a été défini pour l'environnement enfant uniquement .
(bash -c
équivaut à exécuter un script avec le contenu de l'argument du -c
option. Un script ou un autre exécutable ou, dans ce cas, l'argument de bash -c
devient un enfant de l'environnement actuel qui, par conséquent, est bien sûr le parent de l'enfant.)
Dans le "script", les valeurs de la variable sont modifiées. Il affiche maintenant ces nouvelles valeurs.
Une fois le "script" terminé, l'exécution revient à l'environnement parent (la ligne de commande dans ce cas). Après le dernier écho, vous voyez les valeurs d'origine car les modifications apportées à l'environnement enfant n'affectent pas le parent.
Vous dites que
J'utilise toujours la commande d'exportation pour définir la variable d'environnement
Au fait, vous avez formulé cela, il semble que vous essayez vraiment de vous demander comment faire persister une variable environnementale. Pour ce faire, il vous faudrait placer votre export VAR="foo"
déclaration dans votre fichier $HOME/.bash_profile (si vous utilisez bash). Si vous souhaitez que cette variable d'environnement persiste pour tous les utilisateurs sauf root, ajoutez-la à /etc/profile. Si vous souhaitez également l'ajouter pour l'utilisateur root, définissez-le dans /root/.bash_profile .
Cela fonctionnera pour tous les shells de connexion où bash est le shell de choix. Pour les shells sans connexion, vous devez utiliser .bashrc. Je n'ai pas d'idées à offrir pour les autres coques :D