/bin/sh 符号链接到 bash,但是完全不同?

/bin/sh 符号链接到 bash,但是完全不同?

如果我这样做ls -l /bin/sh:我得到

lrwxrwxrwx 1 root root 4 Jan  9 00:01 /bin/sh -> bash

但是,当我启动时sh,我得到了一个完全不同的提示,我的~/.bashrc没有来源,如果我手动来源它,我得到一堆语法错误。

怎么回事?我猜这是某种兼容模式吧?

编辑:

运行 Endeavour OS(基于 arch)

echo $PATH给出:

/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl

是的,/usr/bin/sh 也是 bash 的符号链接。

答案1

是的,当以 形式调用时sh,bash 会进入完整的 Bourne shell 兼容模式。从手册页中可以看到:

如果使用名称 sh 调用 bash,它会尝试尽可能地模仿 sh 的历史版本的启动行为,同时符合 POSIX 标准。当作为交互式登录 shell 或使用 --login 选项的非交互式 shell 调用时,它首先尝试按顺序从 /etc/profile 和 ~/.profile 读取并执行命令。可以使用 --noprofile 选项来禁止此行为。当使用名称 sh 调用作为交互式 shell 时,bash 会查找变量 ENV,如果已定义则扩展其值,并使用扩展的值作为要读取和执行的文件的名称。由于作为 sh 调用的 shell 不会尝试从任何其他启动文件中读取和执行命令,因此 --rcfile 选项无效。使用名称 sh 调用的非交互式 shell 不会尝试读取任何其他启动文件。当作为 sh 调用时,bash 在读取启动文件后进入 posix 模式。

相关内容