Je suis sur Ubuntu 13.04, bash, python2.7.4
L'interpréteur ne voit pas les variables que j'ai définies.
Voici un exemple:
$ echo $A
5
$ python -c 'import os; print os.getenv( "A" )'
None
$ python -c 'import os; print os.environ[ "A" ]'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__
raise KeyError(key)
KeyError: 'A'
Mais tout fonctionne bien avec la variable PATH
:
$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ python -c 'import os; print os.getenv("PATH")'
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Et il remarque des changements dans PATH
:
$ PATH="/home/alex/tests/:$PATH"
$ echo $PATH
/home/alex/tests/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
$ python -c 'import os; print os.getenv("PATH")'
/home/alex/tests/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Qu'est-ce qui ne va pas?
PS le problème survient lors de l'utilisation de $PYTHONPATH
:
$ python -c 'import os; print os.getenv("PYTHONPATH")'
None
Aha! la solution est simple!
Je définissais des variables avec _ $ A=5
commande; lorsque vous utilisez $ export B="kkk"
tout va bien.
C'est-à-dire becaseexport
met la variable à la disposition des sous-processus:
environment
du Shellenvironment
est passée aux sous-processus du Shell.Plaine $ A="kkk"
crée simplement des variables dans le Shell et ne fait rien avec le environment
.
L'interpréteur appelé depuis le Shell obtient son environment
du parent - le Shell. La variable doit donc être exportée dans le environment
avant.
Ces variables (paramètres dans la terminologie bash) ne sont pas des variables d'environnement . Vous souhaitez les exporter dans l'environnement, en utilisant export
ou declare -x
. Voir documentation bash sur l'environnement .