web-dev-qa-db-fra.com

Variables d'environnement globales dans un script shell

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

Si je fais des choses comme

#!/bin/bash
FOO=bar

...ou

#!/bin/bash
export FOO=bar

... les vars semblent rester dans le contexte local, alors que j'aimerais continuer à les utiliser après l'exécution du script.

79
Alex

Exécutez votre script avec .

. myscript.sh

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

export détermine les variables qui seront disponibles pour les nouveaux processus, alors 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.

134
mob

Lorsque vous exécutez un script Shell, il est exécuté dans un sous-shell afin d'éviter tout impact sur l'environnement du shell parent. Vous voulez source le script en faisant:

. ./setfoo.sh

Ceci s’exécute dans le contexte du shell en cours et non comme un sub Coquille.

De la page de manuel de bash:

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

Lisez et exécutez les commandes de nom de fichier dans l'environnement Shell actuel et renvoyez l'état de sortie de la dernière commande exécutée à partir de nom de fichier.

Si nom_fichier ne contient pas de barre oblique, les noms de fichier dans PATH sont utilisés pour rechercher le répertoire contenant le nom_fichier.

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

Si l'option sourcepath de la commande intégrée shopt est désactivée, le chemin PATH 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 ne sont pas modifiés. Le statut de retour est le statut de la dernière commande quittée dans le script (0 si aucune commande n'est exécutée) et false si le nom de fichier est introuvable ou ne peut pas être lu.

51
paxdiablo

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
8
CDT
#!/bin/bash
export FOO=bar

ou

#!/bin/bash
FOO=bar
export FOO

exportation homme

L'environnement de ligne de commande doit attribuer l'attribut d'exportation aux variables correspondant aux noms spécifiés, ce qui les place dans l'environnement des commandes exécutées ultérieurement. Si le nom d'une variable est suivi de = Word, la valeur de cette variable doit être définie sur Word.

4
Andrejs Cainikovs