Question Que fait l'exportation dans BASH? [dupliquer]


Duplication possible:
Différence entre "a = b" et "export a = b" dans bash 

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

export foo=5

et quand ne pas exporter une variable?


66
2018-06-16 20:02


origine


Voici un lien vers au moins une autre question utile sur ce sujet: superuser.com/questions/143413/linux-environment-variables ... car ironiquement, cette question était la première à apparaître sur Google pour ma requête sur l'exportation en bash. - Ogre Psalm33
Aussi: superuser.com/questions/18988/ - Ogre Psalm33
Une utilisation courante est d'ajouter export instructions à .bashrc / .bash_profile pour créer des variables globales persistantes similaires à $HOME. - Evan Plaice
Attention, il y a plus que cette histoire dans cette histoire. Je vous invite à vérifier ma réponse. - jasonleonhard


Réponses:


De man bash:

ENVIRONNEMENT

Lorsqu'un programme est appelé, il reçoit un tableau de chaînes appelé le   environnement. Ceci est une liste de   paires nom-valeur, de la forme   nom = valeur.

Le shell propose plusieurs manières de manipuler l'environnement. Sur   invocation, le shell scanne le sien   environnement et crée un paramètre   pour chaque nom trouvé, automatiquement   le marquer pour l'exportation à l'enfant   processus. Les commandes exécutées héritent   l'environnement. le export  et    declare -x  les commandes permettent   paramètres et fonctions à ajouter   à et supprimé de l'environnement.   Si la valeur d'un paramètre dans le   l'environnement est modifié, la nouvelle valeur   devient une partie de l'environnement,   remplacer l'ancien. L'environnement   hérité par toute commande exécutée   se compose de la coquille initiale   environnement, dont les valeurs peuvent être   modifié dans la coque, moins toutes les paires   enlevé par le unset  commande, plus   tous les ajouts via l'exportation et    declare -x commandes.


14
2018-06-16 20:09



IMHO copier-coller un extrait de la documentation sans aucun effort supplémentaire d'expliquer ne devrait pas être voté. - Artur
Cet extrait n'est pas très clair et franchement je n'ai pas compris ce qui se passe. - Trismegistos
@Artur: au contraire: si la documentation (extrait de la) répond à une question, je préférerais ne pas avoir d'explications supplémentaires. - René Nyffenegger
@ RenéNyffenegger mais il semble que non. Au moins, je ne l'ai pas eu avant d'avoir lu une réponse de BloodPhilia qui devrait être marquée comme acceptée. - Vladislav Rastrusny
Je crois que les points soulevés par Artur et Trismegistos sont que tout le monde peut copier le collage, ce qui ne suffit pas toujours, clarifier et apporter une bonne réponse. Il est bon de copier coller de la documentation ou fournir un lien, en fait, cela est encouragé, mais il devrait y avoir une explication de qualité supplémentaire. En outre, cette explication peut facilement être ignorée par des personnes comme RenéNyffenegger si elles n'en ont pas besoin, mais elle sera là pour ceux qui en bénéficieront. Nous essayons tous d’apprendre et d’avoir différentes manières de comprendre, ce qui permet de couvrir une variété de styles d’apprentissage et d’améliorer votre évaluation. - jasonleonhard


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


85
2018-06-16 20:08



Pouvez-vous indiquer une documentation à cet effet. Je recherche plus d'informations que cela. Par exemple, une variable doit-elle être exportée une seule fois ou devez-vous l'exporter après chaque modification, etc. - Chas. Owens
Vous pouvez vérifier ceci: superuser.com/questions/143413/linux-environment-variables/... - BloodPhilia
Vous pouvez le vérifier en ajoutant quelque chose à un chemin (disons à PYTHONPATH) et puis notant que si vous pouvez echo $PYTHONPATH il n'est pas reconnu par les scripts python ou bash tant que vous export il - Kaushik Ghose


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

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


19
2018-06-16 22:21