bash - 检查 Bash 脚本是否与 sh 兼容

标签 bash shell scripting sh

我有一个定义为 #!/bin/bash 的脚本,我想检查这个脚本是否与 #!/bin/sh 兼容。

有办法吗?

最佳答案

sh 兼容本身并不是一个目标。您遇到什么问题需要您的脚本使用 sh?根据您的推理,不同的选项可能足够也可能不够。如果您只需要您的脚本在大多数现代环境中运行,那么使用 bash 应该非常好,而且实际上可能比使用 sh 更好,因为 sh 映射到不同平台上的不同 shell。在大多数现代环境中,它实际上并不是自己的二进制文件,而只是 POSIX-compliant mode 中的 bash。 , 或者像 dash 这样的另一个 shell。

如果你真的只需要让现有的 Bash 脚本与 shebang #!/bin/sh 一起工作,你有几个选择:

  1. 只需将它作为 sh your_script.sh 运行,看看会发生什么 - Bash 是 sh 语法的超集,因此许多简单的 Bash 脚本都是有效的 sh 脚本。
  2. 按照 rojomoke 的建议运行 sh -n your_script.sh,这将在不实际执行脚本的情况下报告语法错误(但可能无法捕获所有问题)。
  3. 手动审核脚本中的无效语法(John B 的 Bashisms 引用是一个不错的开始),这显然不是一个很好的解决方案,但在实践中这是唯一可以确定的方法。如果这看起来令人生畏,那么,它是 :)

如果您想要/需要支持 sh,最好的选择就是简单地将您的脚本的 shebang 指定为 #!/bin/sh - 如果它在您需要它的环境然后它(根据定义)sh 兼容。

请注意,您可以编写仍然不兼容 POSIX 的 sh 兼容脚本,因为许多标准实用程序(如 grep)都有自己的 POSIX 兼容功能集你也需要尊重。尽管如此,符合 POSIX 本身并不是目的,我鼓励您在尝试符合标准之前确认您确实需要支持 POSIX。

我问了一个related question您可能也会觉得有帮助。

关于bash - 检查 Bash 脚本是否与 sh 兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31606957/

相关文章:

regex - 检查字符串以查看它是否包含 UNIX 中的数字字符

linux - 如何将源文件中的文本复制并粘贴到新文件(仅数字)?

.net - 有用的 PowerShell 一行代码

ios - 如何自动检查 ipa 的嵌入.mobileprovision 中的字段?

bash - cron 脚本不会像它应该的那样重新启动

linux - 如何使用 Unix/Linux 命令计算韩文字 block ?

swift - 迪尔德 : Library not loaded; llbuild image not found

linux - 如何使用 bash 中的安装将目录复制到目录中?

shell - 在 Ansible 中启动 Bitbucket 服务器

bash - 如何抽象三个 bash 脚本之间的通用代码?