bash导出不仅仅适用于一个变量

时间:2015-11-09 18:57:09

标签: bash

有时候,当我使用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,带有下划线的其他出口按预期工作,但是一旦我添加下划线,这似乎开始失败。

2 个答案:

答案 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