【发布时间】:2016-05-10 03:38:05
【问题描述】:
有时,当我在 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,其他带下划线的导出按预期工作,但是一旦我添加下划线,这似乎开始失败。
【问题讨论】:
-
我在这里看不到。这是什么操作系统? OS X 我猜?这是否适用于非
DYLD前缀?这可能是 OS X 的“保护”吗? -
我在 OS X 机器上的行为略有不同,但这表明
DYLD名称有一些特别之处:$ env | grep DYLD dyld:警告,未知环境变量:DYLD_L dyld:警告,未知环境变量:DYLD_LIBRARY -
如果您使用
export命令查看rhem,而不是env,您是否看到导出的变量? -
@jjjkkklllhhh:我认为@Etan 发布的链接是相关的,但我最初的想法(您的回答部分证实了这一点)是从
DYLD_开始的环境变量正在被环境中清除env的安装版本(或其他)。 -
@EtanReisner:是的,实际上有文档here。据此,“安装系统文件时,它们会被标记为特殊标志以防止修改......”此外,
/bin和/usr/bin等目录也会自动受到保护。最后,“[a]ny 动态链接器 (dyld) 环境变量,例如 DYLD_LIBRARY_PATH,在启动受保护进程时会被清除。”在这里,我认为问题在于env受到保护。
标签: bash