检查Bash脚本是否与sh兼容

时间:2015-07-24 09:30:42

标签: bash shell scripting sh

我有一个脚本,其中定义了#!/bin/bash,我想检查此脚本是否与#!/bin/sh兼容。

有办法吗?

2 个答案:

答案 0 :(得分:6)

保持sh - 兼容并不是一个目标。您遇到了哪些问题需要您的脚本与sh一起使用?根据您的推理,不同的选项可能也可能不够。如果您只需要在大多数现代环境中运行脚本,那么使用bash应该非常好,并且实际上可能比使用sh更好,因为sh映射到不同平台上的不同shell 。在大多数现代环境中,它实际上并不是自己的二进制文件,而只是POSIX-compliant mode中的bashdash之类的其他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引用并不是一个糟糕的开始),这显然不是一个很好的解决方案,但在实践中它是只有这样才能确定。如果这看起来令人生畏,那就是:)
  4. 如果您希望/需要支持sh,最好的选择就是将您的脚本指定为#!/bin/sh - 如果它在您需要的环境中按照需要运行,那么它& #39; s(根据定义)sh - 兼容。

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

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

答案 1 :(得分:0)

使用-n选项运行脚本将解析并读取命令,并报告语法错误,但不会执行代码。

sh -n <scriptname>