J'utilise Red Hat Linux Enterprise 5; J'utilise toujours la commande export pour définir les variables d'environnement.
Existe-t-il d'autres moyens de définir des variables d'environnement et quels sont leurs avantages / inconvénients?
J'utilise Red Hat Linux Enterprise 5; J'utilise toujours la commande export pour définir les variables d'environnement.
Existe-t-il d'autres moyens de définir des variables d'environnement et quels sont leurs avantages / inconvénients?
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
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
la source
l'exportation est le moyen le plus simple de le faire, alors pourquoi ne pas en rester là?
la source
FOO=BAR; executethisprogram
Le programmeexecutethisprogram
NE SAURAIT PAS la valeur de la variableFOO
. Par contre, en utilisant:FOO=BAR; export FOO; executethisprogram
Le programmeexecutethisprogram
Connaître la valeur de la variableFOO
.export FOO
est une commande qui marque la variableFOO
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:
Par exemple:
sortie en anglais.
sortie en polonais (si disponible).
Dans le passé, sh ne pouvait pas exporter VAL = val. Tu devais
la source
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 tapels
à une invite de commande, le shell interactif est le parent etls
est l'enfant. Si j'ai un script qui utilisels
alors le script est le parent etls
est l'enfant.