我有一个脚本,其中定义了#!/bin/bash
,我想检查此脚本是否与#!/bin/sh
兼容。
有办法吗?
答案 0 :(得分:6)
保持sh
- 兼容并不是一个目标。您遇到了哪些问题需要您的脚本与sh
一起使用?根据您的推理,不同的选项可能也可能不够。如果您只需要在大多数现代环境中运行脚本,那么使用bash
应该非常好,并且实际上可能比使用sh
更好,因为sh
映射到不同平台上的不同shell 。在大多数现代环境中,它实际上并不是自己的二进制文件,而只是POSIX-compliant mode中的bash
或dash
之类的其他shell。
如果你真的需要让现有的Bash脚本与shebang #!/bin/sh
一起使用,你有几个选择:
sh your_script.sh
运行,看看会发生什么 - Bash是sh
语法的超集,因此许多简单的Bash脚本都是有效的sh
脚本。sh -n your_script.sh
,这将报告语法错误而不会实际执行脚本(但可能无法捕获所有问题)。如果您希望/需要支持sh
,最好的选择就是将您的脚本指定为#!/bin/sh
- 如果它在您需要的环境中按照需要运行,那么它& #39; s(根据定义)sh
- 兼容。
请注意,您可以编写一个仍然不符合POSIX标准的sh
兼容脚本,因为许多标准实用程序(如grep
)都有自己符合POSIX标准的功能。我也需要尊重。尽管如此,符合POSIX标准本身并不是目的,我建议您在尝试遵守标准之前确认您确实需要支持POSIX。
我问了related question您可能会觉得有帮助。
答案 1 :(得分:0)
使用-n
选项运行脚本将解析并读取命令,并报告语法错误,但不会执行代码。
sh -n <scriptname>