我有一个定义为 #!/bin/bash
的脚本,我想检查这个脚本是否与 #!/bin/sh
兼容。
有办法吗?
最佳答案
与 sh
兼容本身并不是一个目标。您遇到什么问题需要您的脚本使用 sh
?根据您的推理,不同的选项可能足够也可能不够。如果您只需要您的脚本在大多数现代环境中运行,那么使用 bash
应该非常好,而且实际上可能比使用 sh
更好,因为 sh
映射到不同平台上的不同 shell。在大多数现代环境中,它实际上并不是自己的二进制文件,而只是 POSIX-compliant mode 中的 bash
。 , 或者像 dash
这样的另一个 shell。
如果你真的只需要让现有的 Bash 脚本与 shebang #!/bin/sh
一起工作,你有几个选择:
- 只需将它作为
sh your_script.sh
运行,看看会发生什么 - Bash 是sh
语法的超集,因此许多简单的 Bash 脚本都是有效的sh
脚本。 - 按照 rojomoke 的建议运行
sh -n your_script.sh
,这将在不实际执行脚本的情况下报告语法错误(但可能无法捕获所有问题)。 - 手动审核脚本中的无效语法(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/