有时候,当我使用bash导出时,它不会给出错误,但它也不会设置环境变量。这就是我的意思:
这有效:
bash-3.2$ export DYLD=$ABC_HOME
bash-3.2$ env | grep DYLD
DYLD=/Users/my_username/abc_home
但是当我继续时,这些不是:
bash-3.2$ export DYLD_LIBRARY=$ABC_HOME
bash-3.2$ env | grep DYLD
DYLD=/Users/my_username/abc_home
bash-3.2$ export DYLD_L=$ABC_HOME
bash-3.2$ env | grep DYLD
DYLD=/Users/my_username/abc_home
bash-3.2$ export DYLD_=$ABC_HOME
bash-3.2$ env | grep DYLD
DYLD=/Users/my_username/abc_home
我知道我可以解决这个问题吗?
FWIW,带有下划线的其他出口按预期工作,但是一旦我添加下划线,这似乎开始失败。
答案 0 :(得分:6)
这似乎是OS X保护(可能在El Capitan中添加),可防止这些(潜在危险的)环境变量导出到生成的进程。
Apple开发者论坛上的This thread对此进行了讨论。
官方文档here也简要记录了这一点:
生成由系统完整性保护限制的进程的子进程,例如通过在
NSTask
的包中启动帮助程序进程或调用exec(2)
命令,重置该子进程的Mach特殊端口。启动受保护的进程时,将清除任何动态链接器(dyld
)环境变量,例如DYLD_LIBRARY_PATH
。
答案 1 :(得分:-2)
试试这个:
oldifs=$IFS
IFS=$'\n'
export DYLD_LIBRARY=$ABC_HOME
env | grep DYLD
IFS=$oldifs