检查Bash脚本是否与sh兼容

Thu*_*tne 3 bash shell scripting sh

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

有办法吗?

dim*_*414 6

作为sh兼容是不是本身就是一个目标.您遇到了哪些问题需要您的脚本使用sh?根据您的推理,不同的选项可能也可能不够.如果你只是需要你的脚本在大多数现代环境中运行,那么使用它bash应该是完全正常的,并且实际上可能比使用更好sh,因为sh映射到不同平台上的不同shell.在大多数现代环境中,它实际上并不是它自己的二进制文件,而只是bashPOSIX兼容模式下,或者像其他shell一样dash.

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

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

如果你想/需要支持sh最好的选项,只需要指定你的脚本的shebang #!/bin/sh- 如果它在你需要的环境中按照需要运行,那么它(根据定义)是sh兼容的.

请注意,您可以编写sh仍然不符合POSIX标准的兼容脚本,因为许多标准实用程序grep都有自己的POSIX兼容功能集,您也需要遵守.但同样,POSIX兼容本身并不是目的,我建议您在尝试符合标准之前确认您确实需要支持POSIX.

我问了一个你可能会觉得有用的相关问题.