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

当通过符号链接访问时,bash似乎忽略了bash_ENV,bash,symlink,non-interactive,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 bas

我在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的预期行为。

引用:

如果使用名称sh调用bash,它将尝试模拟 尽可能接近sh的历史版本, 在符合 POSIX标准也是如此


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

bash
作为
sh
调用时,它会故意做出不同的行为,并禁用许多
bash
扩展


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

您是对的,它与符号链接无关,只与调用shell时的shell名称有关。我没有意识到这种行为——谢谢!这是关于
$ENV
的一个有趣的地方,我不知道
sh
有一个类似于
bash
$bash\u ENV
的环境变量。谢谢再进一步研究一下,
sh
仅对交互式shell使用
$ENV
,而bash对交互式和非交互式shell使用
$bash_ENV
。因此,在上述情况下,仅使用
$ENV
不会改变结果。尽管如此,意识到这一点还是很好的。谢谢你指出这一点。我已经更新了答案。请注意,
sh
行为随时间发生了显著变化。以下是FreeBSD sh手册页的一段摘录:“与较旧版本的sh不同,ENV脚本仅在调用交互式shell时才来源。这关闭了一个众所周知的、有时很容易被利用的与考虑不周的ENV脚本相关的安全漏洞。”链接到UNIX sh手册页: