哪个 bash 正在执行?

哪个 bash 正在执行?

我想我已经将 bash 配置为 shell,但为什么会发生这种情况?

我的 shell 是 bash:

# ls -al `which sh`
  lrwxrwxrwx 1 root root 4 Jul 12 03:25 /bin/sh -> bash 

使用 sh 执行脚本时出错

# sh ubuntu/util.sh
  ubuntu/util.sh: line 32: `test-build-release': not a valid identifier

bash 没有错误

# bash ubuntu/util.sh

答案1

它正在运行您期望的 bash 可执行文件,但您的 shell 不仅仅是 bash;它是在 POSIXsh兼容模式下运行的 bash 。它通过查看调用它的命令名称来实现这一点,如果是sh,那么它会自动激活 POSIX 模式。它在这方面做得非常糟糕,不应该完全依赖它来测试 POSIXsh兼容脚本,但它应该大大限制允许的语法。

--posix

更改默认操作与 POSIX 标准不同的 bash 行为以匹配标准(posix 模式)。请参阅下面的文档参考,该文档详细介绍了 posix 模式如何影响 bash 的行为。

并从http://tiswww.case.edu/php/chet/bash/POSIX:

--posix使用命令行选项启动 Bash或set -o posix在 Bash 运行时执行将导致 Bash 更接近 POSIX 标准,方法是更改​​行为以匹配 POSIX 在 Bash 默认值不同的区域中指定的行为。

当作为 调用时sh,Bash 在读取启动文件后进入 POSIX 模式。

相关内容