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é.
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.
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.
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
#!/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.