Quelle est la meilleure façon de définir une variable d'environnement dans .bashrc?

11

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)?

Flávio Amieiro
la source

Réponses:

16

La meilleure voie

export VAR=value

La différence

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.

agnul
la source
1
msgstr "ne définit la variable que pour la durée du script (.bashrc dans ce cas)" C'est faux / trompeur. Les variables ainsi définies persistent dans le shell interactif qui lit .bashrc.
Ian Kelling
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.
Anthony Geoghegan
10

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"

Mike H
la source