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

ato*_*ate 2 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
Run Code Online (Sandbox Code Playgroud)

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

env | grep BASH
BASH_ENV=/home/users/atomicpirate/.bashrc
Run Code Online (Sandbox Code Playgroud)

另外,.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
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*man 6

引用bash手册页:

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

需要注意的是,当作为交互式shell中运行,现代sh用途$ENV的方式类似的方式bash使用$BASH_ENV.bash也模仿了这种行为.