Lors de la configuration d'une variable dans .bashrc, dois-je l'utiliser?
export VAR=value
Ou serait-ce suffisant?
VAR=value
Quelle est exactement la différence (s'il y en a une)?
Lors de la configuration d'une variable dans .bashrc, dois-je l'utiliser?
export VAR=value
Ou serait-ce suffisant?
VAR=value
Quelle est exactement la différence (s'il y en a une)?
Réponses:
export VAR=value
Faire
VAR=value
définit uniquement la variable pour la durée du script ( .bashrcdans ce cas). Les processus enfants (le cas échéant) du script n'auront pas de VAR défini, et une fois que le script VARsera terminé.
export VAR=value
ajoute explicitement VARà la liste des variables transmises aux processus enfants. Vous voulez l'essayer? Ouvrez un shell, faites
PS1="foo > "
bash --norc
Le nouveau shell obtient l'invite par défaut. Si vous faites quelque chose comme
export PS1="foo > "
bash --norc
le nouveau shell obtient l'invite que vous venez de définir.
Mise à jour: comme le note Ian Kelling ci-dessous, les variables définies .bashrcpersistent dans le shell d'origine .bashrc. Plus généralement, lorsque le shell source un script (à l'aide de la source scriptnamecommande), les variables définies dans le script persistent pendant toute la durée de vie du shell.
PS1est un mauvais exemple de variable à exporter en tant que variable d'environnement. Il n'a de sens que pour les processus enfants qui sont des shells et il est interprété différemment par différents shells (par exemple, bash et dash). La meilleure pratique consiste à simplement la définir comme une variable shell standard dans le .bashrc. De meilleurs exemples de variables d'environnement comprennent HOME, PATH, EDITOR, etc.
Les deux semblent fonctionner très bien, mais l'utilisation de l'exportation garantira que la variable sera disponible pour les sous-coquilles et autres programmes. Pour tester cela, essayez ceci.
Ajoutez ces deux lignes à votre fichier .bashrc
TESTVAR="no export"
export MYTESTVAR="with export"
Ouvrez ensuite un nouveau shell.
En cours d'exécution echo $TESTVARet echo $MYTESTVARaffichera le contenu de chaque variable. Maintenant, à l'intérieur de ce même shell, supprimez ces deux lignes de votre fichier .bashrc et exécutez bashpour démarrer un sous-shell.
L'exécution echo $TESTVARaura une sortie vide, mais l'exécution echo $MYTESTVARaffichera "avec exportation"