web-dev-qa-db-fra.com

Que fait l'exportation à BASH?

Duplicate possible:
Différence entre “a = b” et “export a = b” dans bash

C'est difficile à admettre, mais je n'ai jamais vraiment compris ce que export fait exactement avec une variable d'environnement. Je sais que si je n'exporte pas de variable, je ne la vois parfois pas dans les processus enfants, mais parfois, il me semble que je le peux. Qu'est-ce qui se passe vraiment quand je dis

export foo=5

et quand ne devrais-je pas exporter une variable?

71
Chas. Owens

De man bash:

ENVIRONNEMENT

Lorsqu'un programme est appelé, il se voit attribuer un tableau de chaînes appelé environnement. Ceci est une liste de paires nom-valeur, de la forme nom = valeur.

Le shell fournit plusieurs manières de manipuler l'environnement. Lors de l'appel, le shell analyse son propre environnement et crée un paramètre pour chaque nom trouvé, le marquant automatiquement pour l'exportation vers les processus enfants. Les commandes exécutées héritent de l'environnement. Les commandes export et declare -x permettent d'ajouter des paramètres et des fonctions à l'environnement et de les supprimer. Si la valeur d'un paramètre dans l'environnement est modifiée, la nouvelle valeur devient une partie de l'environnement et remplace l'ancienne. L'environnement hérité par toute commande exécutée est constitué de l'environnement initial du shell, dont les valeurs peuvent être modifiées dans le shell, moins les paires supprimées par la commande unset, plus les ajouts via les commandes export et declare -x.

15
sml

Les variables exportées sont transmises aux processus enfants, pas les variables non exportées.

94
BloodPhilia

Lorsque vous utilisez export, vous ajoutez la variable à la liste des variables d'environnement du shell dans laquelle la commande d'exportation a été appelée et toutes les variables d'environnement d'un shell sont transmises aux processus enfants, raison pour laquelle vous pouvez les utiliser.

Lorsque vous avez terminé, l'environnement de Shell est détruit, c'est pourquoi les variables d'environnement sont déclarées et exportées lors de la connexion, dans le fichier .bashrc par exemple.

20
alfredozn