我有一个脚本,其中定义了#!/bin/bash
,我想检查这个脚本是否与#!/bin/sh
兼容。
有没有办法做到这一点?
我有一个脚本,其中定义了#!/bin/bash
,我想检查这个脚本是否与#!/bin/sh
兼容。
有没有办法做到这一点?
sh
兼容并不是必须的。您遇到了什么问题需要您的脚本与sh
一起工作?根据您的理由,不同的选项可能足够或不足够。如果您只需要在大多数现代环境中运行脚本,则使用bash
应该完全可以,并且实际上可能比使用sh
更好,因为sh
在不同平台上映射到不同的shell。在大多数现代环境中,它实际上并不是自己的二进制文件,而只是符合POSIX标准的模式下的bash
或另一个shell,如dash
。
如果您真的只需要让现有的Bash脚本与shebang #!/bin/sh
一起工作,则有几个选项:
sh your_script.sh
并查看发生了什么 - Bash 是 sh
语法的超集,因此许多简单的 Bash 脚本都是有效的 sh
脚本。sh -n your_script.sh
,这将报告语法错误,而不实际执行脚本(但可能无法捕获所有问题)。如果您想/需要支持 sh
,最好的选择就是将脚本的 shebang 指定为 #!/bin/sh
- 如果它在您需要的环境中表现出所需的行为,则它(根据定义)与 sh
兼容。
sh
兼容的脚本,但仍不符合POSIX标准,因为许多标准实用程序(如grep
)具有自己的符合POSIX标准的功能集,您也需要尊重这些功能。然而,符合POSIX标准本身并不是最终目的,我鼓励您在尝试符合标准之前确认自己确实需要支持POSIX。dash
。我的观点在于(1.)试图符合sh
标准通常并不那么重要。还有什么是“明显错误/无用”的呢? - dimo414sh
脚本”。这意味着存在一些 Bash 脚本,特别是非平凡的脚本,它们不是有效的 sh
脚本。 - dimo414sh
兼容性。尽管它们有联系,但它们是不同的目标。 - dimo414-n
选项运行脚本将解析并读取命令,并报告语法错误,但不会执行代码。sh -n <scriptname>