Réponses:
Voici un extrait de la page de manuel Bash:
export [-fn] [nom [= mot]] ...
export -p
Les noms fournis sont marqués pour l'exportation automatique vers l'environnement des commandes exécutées ultérieurement. Si l'option -f est étant donné, les noms font référence à des fonctions ...
Si vous n'avez besoin que de la variable dans l'environnement actuel, il n'est pas nécessaire d'utiliser export.
var=value
Modifier:
Sans exportation: environnement actuel uniquement. Avec exportation: environnement actuel et environnements enfants.
Voici une démonstration de l'impact de l'exportation sur la disponibilité d'une variable dans un environnement enfant et du fait que les modifications apportées à l'environnement enfant n'affectent pas le parent:
$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
Après le premier écho ( echo "parent..."
) vous voyez "123" et "456" parce que les deux var1
et var2
sont actifs dans l'environnement actuel. Vous ne voyez pas de valeur pour var3
parce que ce n'est pas encore défini.
Après la ligne qui commence " var3=...
"vous ne voyez pas de valeur pour var1
parce qu'il n'a pas été exporté. Vous faire voir une valeur pour var2
parce qu'il était exportés. Vous voyez une valeur pour var3
parce qu'il a été défini pour l'environnement des enfants seulement .
( bash -c
équivaut à exécuter un script avec le contenu de l'argument de la -c
option. Un script ou un autre exécutable ou, dans ce cas, l’argument à bash -c
devient un enfant de l’environnement actuel, qui est bien entendu le parent de l’enfant.)
Dans le "script", les valeurs de la variable sont modifiées. Il affiche maintenant ces nouvelles valeurs.
Une fois le "script" terminé, l'exécution revient à l'environnement parent (la ligne de commande dans ce cas). Après le dernier écho, vous voyez les valeurs d'origine car les modifications apportées à l'environnement enfant n'affectent pas le parent.
export
- rendre les variables disponibles pour ces environnements enfants.
Vous dites que
J'utilise toujours la commande export pour définir la variable d'environnement
Au dire de vos propos, on dirait que vous essayez vraiment de vous demander comment vous faites persister une variable environnementale. Pour ce faire, vous devrez placer votre export VAR="foo"
dans votre fichier $ HOME / .bash_profile (si vous utilisez bash). Si vous voulez que cette variable d'environnement persiste pour tous les utilisateurs sauf root, ajoutez-la à / etc / profile. Si vous souhaitez également l'ajouter à l'utilisateur root, définissez-le dans /root/.bash_profile.
Cela fonctionnera pour tous les shell de connexion où bash est le shell de choix. Pour les shells non connectés, vous devez utiliser .bashrc. Je n'ai aucune idée à offrir pour les autres coquilles: D
l'exportation est le moyen le plus simple de le faire, alors pourquoi ne pas en rester là?
export VARIABLE=value # for Bourne, bash, and similar shells
setenv VARIABLE value # for csh and similar shells
FOO=BAR; executethisprogram
Le programme executethisprogram
NE SAURAIT PAS la valeur de la variable FOO
. Par contre, en utilisant: FOO=BAR; export FOO; executethisprogram
Le programme executethisprogram
Connaître la valeur de la variable FOO
.
export FOO
est une commande qui marque la variable FOO
afin qu'il soit accessible aux processus enfants de l'environnement dans lequel la commande a été émise. Ce parent peut être un script ou un shell interactif.
Vous pouvez aussi faire quelque chose comme ça:
VAR=val application
Par exemple:
LANG=C ls --help
sortie en anglais.
LANG=pl_PL ls --help
sortie en polonais (si disponible).
Dans le passé, sh ne pouvait pas exporter VAL = val. Tu devais
VAL=val; export VAL
ls
, par exemple) sans affecter la valeur de cette variable dans l’environnement actuel (parent).
ls
est un enfant du processus à partir duquel il a été exécuté. Si je tape ls
à une invite de commande, le shell interactif est le parent et ls
est l'enfant. Si j'ai un script qui utilise ls
alors le script est le parent et ls
est l'enfant.