我有一个关于环境变量的非常有趣的问题,并且谷歌搜索并没有给我带来任何有意义的结果:
$ echo $BUCKET && python -c "import os; print os.environ['BUCKET']"
mule-uploader-demo
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: 'BUCKET'
因此,我有一个在 bash 中可用但在 python 中不可用的环境变量。这种情况怎么会发生,我该如何解决?以下是一些其他详细信息:
- 环境变量是通过
source envvars.sh
命令设置的 - 该
envvars.sh
文件仅包含如下行:KEY=value
- 我在 bash 和 zsh 中都复现了这个问题
- 如果我做一个
export BUCKET=$BUCKET
,它就起作用了
答案1
这与 bash 中的变量范围有关。export
使您的变量可供子进程使用,例如:
→ export BUCKET=foo
→ env | grep BUCKET
80:BUCKET=foo
→ PAIL=bar
→ env | grep PAIL # no output
→ python -c "import os; print os.environ['BUCKET']"
foo
→ python -c "import os; print os.environ['PAIL']"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "...", line 23, in __getitem__
raise KeyError(key)
KeyError: 'PAIL'
→ CAN=baz python -c "import os; print os.environ['CAN']"
baz
因此子进程PAIL
失败。