我在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的预期行为。
答案 0 :(得分:6)
引用bash manpage:
如果使用名称sh调用bash,它会尝试模仿启动行为 sh的历史版本尽可能接近, 同时符合 POSIX标准也是如此。
请注意,当作为交互式shell运行时,现代sh
使用$ENV
的方式与bash
使用$BASH_ENV
的方式类似。这种行为也被bash模仿。
答案 1 :(得分:3)
当bash
作为sh
被调用时,它会故意以不同的方式运行,并禁用多个bash
扩展程序。
其中一个变化是,它不再读取$BASH_ENV
指示的文件。您可以通过将文件放入常规文件(暂时)并使用常规文件查看相同的行为来证明它与符号链接无关。