2

我在/bin这样设置的 UNIX 环境中工作:

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

4

2 回答 2

6

引用bash 联机帮助页

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

请注意,当作为交互式 shell 运行时,modernsh使用$ENV方式类似于bash使用$BASH_ENV. 这种行为也被 bash 模仿。

于 2012-01-27T15:53:41.127 回答
3

bash被调用为sh时,它故意表现不同,并禁用许多bash扩展。

看起来,其中一项变化是它不再读取$BASH_ENV. 您可以通过将文件(临时)制作成常规文件并在常规文件中看到相同的行为来证明它与符号链接无关。

于 2012-01-27T15:53:46.480 回答