在Mac 10.11.6上,使用GNU bash 3.2.57(1)-发行版(x86_64-apple-darwin15),该set +a
命令似乎不起作用:
script.py
#!/usr/bin/python
import os
print("VAR0 is:", os.environ.get("VAR0")
命令:
$ 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
带走:是的,set +a
取消设置set -a
正因为如此,但出口的变量不会成为联合国。然后,每个变量都需要取消导出或取消设置。
选项allexport
(与相同set -a
)允许自动导出新的和更改的变量。激活set -a
选项之前存在的变量将不会导出。
测试前有两点:
的条件set -a
可以用来打印shopt -po allexport
。
并且可以通过shopt -os allexport
和进行更改shopt -ou allexport
。
$ shopt -po allexport
set +o allexport
$ set -a
$ shopt -po allexport
set -o allexport
$ set +a
$ shopt -po allexport
set +o allexport
壳的方式来测试环境变量是检查的输出environment
命令,居然到grep
它
$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
不需要来自python的外部程序(需要在首次调用时进行编译)。如果这会让您感到高兴,您仍然可以使用它,但是并没有真正的需要。
如果未设置选项(set +a
)。一个新的变量将不会被导出。
$ unset VAR0
$ VAR0=abc
$ env | grep VAR0
# nothing is printed.
或者,如果您仍然想要程序:
$ ./envtest.py
VAR0 is: None
如果-a
更改了该选项,则只有在更改后才能导出var:
$ set -a
$ shopt -po allexport
set -o allexport
$ env | grep VAR0
$ ./envtest.py
VAR0 is: None
如果变量更改:
$ VAR0=bcd
$ env | grep VAR0
VAR0=bcd
$ ./envtest.py
VAR0 is: bcd
但是,如果set +a
应用,变量将保留在环境中:
$ set +a
$ env | grep VAR0
VAR0=bcd
$ ./envtest.py
VAR0 is: bcd
即使var被更改,它仍然是环境的一部分:
$ VAR0=xyz
$ env | grep VAR0
VAR0=xyz
$ ./envtest.py
VAR0 is: xyz
直到取消导出(删除导出属性)为止:
$ declare +x VAR0
或者仅仅是 unset
$ env | grep VAR0
VAR0=xyz
$ unset VAR0
$ env | grep VAR0
不,分配空值是不一样的:
$ VAR0=''
$ env | grep VAR0
VAR0=
您的程序没有清楚显示以下内容:
$ ./envtest.py
VAR0 is:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句