Variables d'environnement globales dans un script shell

Comment définir une variable d'environnement dans un script bash?

Si je fais des choses comme

#!/bin/bash
FOO=bar

...ou

#!/bin/bash
export FOO=bar

...les variables semblent rester dans le contexte local, alors que j'aimerais continuer à les utiliser une fois le script terminé.

77
demandé sur Benjamin W. 2009-09-23 10:25:12

5 réponses

Exécutez votre script avec .

. myscript.sh

Cela exécutera le script dans l'environnement shell actuel.

export régit les variables qui seront disponibles pour les nouveaux processus, donc si vous dites

FOO=1
export BAR=2
./runScript.sh

, Puis $BAR sera disponible dans l'environnement de runScript.sh, mais $FOO ne sera pas.

126
répondu mob 2009-09-23 06:28:34

Lorsque vousExécutez un script shell, il est fait dans un sous-shell afin qu'il ne puisse pas affecter l'environnement du shell parent. Vous voulez sourcer le script en faisant:

. ./setfoo.sh

Cela l'exécute dans le contexte du shell courant , pas en tant que shell sub.

De la page de manuel bash:

. nom de fichier [arguments]
nom du fichier source [arguments]

Lire et exécuter des commandes à partir du nom de fichier dans le shell actuel environnement et renvoie l'état de sortie de la dernière commande exécutée du nom de fichier.

Si filename ne contient pas de barre oblique, les noms de fichiers dans PATH sont utilisés pour trouver le répertoire contenant le nom de fichier.

Le fichier recherché dans PATH n'a pas besoin d'être exécutable. Quand bash n'est pas en mode POSIX, le répertoire courant est recherché si aucun fichier n'est trouvé en chemin.

Si l'option sourcepath de la commande intégrée shopt est désactivée, le chemin n'est pas recherché.

Si des arguments sont fournis, ils deviennent les paramètres de position lorsque le nom de fichier est exécuté.

Sinon, les paramètres de position sont inchangés. Le statut de retour est l'état de la dernière commande terminée dans le script (0 si non les commandes sont exécutées), et false si le nom de fichier est introuvable ou être lu.

47
répondu paxdiablo 2016-12-02 05:25:36

source myscript.sh est également réalisable.

Description de la commande linux source:

source is a Unix command that evaluates the file following the command, 
as a list of commands, executed in the current context
6
répondu CDT 2016-11-15 03:10:47
#!/bin/bash
export FOO=bar

Ou

#!/bin/bash
FOO=bar
export FOO

exportation de l'homme:

Le shell doit donner l'attribut export aux variables correspondant aux noms spécifiés, ce qui doit les amener à être dans l'environnement des commandes exécutées ultérieurement. Si le nom d'une variable est suivi de = word, alors la valeur de cette variable doit être définie sur word.

4
répondu Andrejs Cainikovs 2009-09-23 06:33:09
FOO=bar
export FOO
-3
répondu Niko 2009-09-23 06:27:49