Sur Mac 10.11.6, en utilisant GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15) le set +a
la commande semble ne pas fonctionner :
script.py
#!/usr/bin/python
import os
print("VAR0 is:", os.environ.get("VAR0")
Commandes :
$ VAR0=abc
$ ./script.py
('VAR0 is:', None) # expected
$ set -a
$ VAR0=abc
$ ./script.py
('VAR0 is:', 'abc') # expected, VAR0 has been exported to the environment and script.py has access to it
$ set +a
$ VAR0=def
$ ./script.py
('VAR0 is:', 'def') # <= unexpected
Réponse acceptée :
À emporter :oui, set +a
annule set -a
mais les variables ne deviennent pas non exportées à cause de cela. Chaque variable doit ensuite être non exportée ou non définie.
L'option allexport
(Identique à set -a
) permet l'exportation automatique de nouveau et modifié variables. Variables qui existent avant d'activer le set -a
l'option ne sera pas exportée.
Deux points avant de tester :
-
La condition de
set -a
peut être imprimé avecshopt -po allexport
.
Et peut être modifié avecshopt -os allexport
etshopt -ou allexport
.$ shopt -po allexport set +o allexport $ set -a $ shopt -po allexport set -o allexport $ set +a $ shopt -po allexport set +o allexport
-
La méthode shell pour tester les variables d'environnement consiste à examiner la sortie de l'
environment
commande, en fait àgrep
il$ env | grep PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Pas besoin d'un programme externe de python (qui doit être compilé au premier appel). Vous pouvez toujours l'utiliser si cela vous rend heureux, mais ce n'est pas vraiment nécessaire.
Si l'option n'est pas définie (set +a
). Un nouveau la variable ne sera pas être exporté.
$ unset VAR0
$ VAR0=abc
$ env | grep VAR0
# nothing is printed.
Ou, si vous voulez toujours votre programme :
$ ./envtest.py
VAR0 is: None
Si le -a
l'option est modifiée, la var ne sera pas exportée tant qu'elle n'aura pas été modifiée :
$ set -a
$ shopt -po allexport
set -o allexport
$ env | grep VAR0
$ ./envtest.py
VAR0 is: None
Si la variable change :
$ VAR0=bcd
$ env | grep VAR0
VAR0=bcd
$ ./envtest.py
VAR0 is: bcd
Mais la variable restera dans l'environnement si le set +a
est appliqué :
$ set +a
$ env | grep VAR0
VAR0=bcd
$ ./envtest.py
VAR0 is: bcd
Même si la variable est modifiée, elle fait toujours partie de l'environnement :
$ VAR0=xyz
$ env | grep VAR0
VAR0=xyz
$ ./envtest.py
VAR0 is: xyz
Jusqu'à ce qu'il soit non exporté (supprimez l'attribut d'exportation) :
$ declare +x VAR0
Ou c'est simplement unset
$ env | grep VAR0
VAR0=xyz
$ unset VAR0
$ env | grep VAR0
Non, attribuer une valeur vide n'est pas la même chose :
$ VAR0=''
$ env | grep VAR0
VAR0=
Ce que votre programme ne montre pas aussi clairement :
$ ./envtest.py
VAR0 is: