当通过符号链接访问时,bash似乎忽略了BASH_ENV

时间:2012-01-27 15:50:25

标签: bash symlink non-interactive

我在UNIX环境中工作/bin已设置如下:

-rwxr-xr-x  1 root root 617144 Nov 19  2009 bash
lrwxrwxrwx  1 root root      4 Nov 23  2010 sh -> bash

在我的环境中,我将$BASH_ENV设置为指向我的本地.bashrc:

env | grep BASH
BASH_ENV=/home/users/atomicpirate/.bashrc

此外,.bashrc还有第一行echo BASHRC READ

我希望/ bin / sh和/ bin / bash的行为与此设置完全相同......但它们不会:

/bin/bash -c 'echo $BASH_ENV'
BASHRC READ
/home/users/atomicpirate/.bashrc

/bin/sh -c 'echo $BASH_ENV'
/home/users/atomicpirate/.bashrc

在第二种情况下,不读取.bashrc。知道为什么会这样吗?似乎符号链接打破了$ BASH_ENV的预期行为。

2 个答案:

答案 0 :(得分:6)

引用bash manpage

  

如果使用名称sh调用bash,它会尝试模仿启动行为   sh的历史版本尽可能接近,   同时符合   POSIX标准也是如此。

请注意,当作为交互式shell运行时,现代sh使用$ENV的方式与bash使用$BASH_ENV的方式类似。这种行为也被bash模仿。

答案 1 :(得分:3)

bash作为sh被调用时,它会故意以不同的方式运行,并禁用多个bash扩展程序。

其中一个变化是,它不再读取$BASH_ENV指示的文件。您可以通过将文件放入常规文件(暂时)并使用常规文件查看相同的行为来证明它与符号链接无关。