J'ai lu ici que le but d' export
un shell est de rendre la variable disponible pour les sous-processus démarrés à partir du shell.
Cependant, j'ai également lu ici et ici que "les processus héritent de leur environnement parent (le processus qui les a démarrés)".
Si tel est le cas, pourquoi avons-nous besoin export
? Qu'est-ce que je rate?
Les variables shell ne font-elles pas partie de l'environnement par défaut? Quelle est la différence?
la source
set -k
est tel qu'on peut utilisercmd ENVVAR=value
à la place deENVVAR=value cmd
, cela ne fonctionnera pas dans votre exemple à moins d'avoirset -k
été exécuté avant d'appelerf
. De plus, peu de shell le supporte de nos jours et uniquement pour des raisons de compatibilité avec le shell Bourne. Dans le shell Bourne (ou Korn), cela ne fonctionnerait pas pour les fonctions. Et comme cela affecte l'analyse syntaxique du shell, il doit être en vigueur au moment où le shell lit le code qui l'utilise.set -a
Il y a une différence entre les variables shell et les variables d'environnement. Si vous définissez une variable shell sans la
export
remplacer, elle n’est pas ajoutée à l’environnement des processus et n’est donc pas héritée de ses enfants.En utilisant,
export
vous indiquez au shell d'ajouter la variable shell à l'environnement. Vous pouvez tester cela en utilisantprintenv
(qui affiche simplement son environnementstdout
, puisqu'il s'agit d'un processus enfant, vous voyez l'effet desexport
variables ing):la source
Une variable, une fois exportée, fait partie de l'environnement.
PATH
est exporté dans le shell lui-même, tandis que les variables personnalisées peuvent être exportées selon les besoins. En utilisant un code d'installation:Comparer
Avec
Comme
foo
n’est pas exporté par le shell ettest2.sh
ne l’a jamais exporté, il ne faisait pas partie de l’environnement desubshell.sh
la dernière exécution.la source