是否存在类似于Perl :: Critic的工具,该工具将检查您的Shell脚本并指出缺陷,可移植性问题,使用无故障的非标准程序,使用折旧的程序等?
我意识到这set -o posix
将禁用非POSIX用法,但这不会告诉我我想知道的事情,例如zsh索引从1开始的shell数组,从0开始的bash索引,以及ash根本不支持数组。
是否存在类似于Perl :: Critic的工具,该工具将检查您的Shell脚本并指出缺陷,可移植性问题,使用无故障的非标准程序,使用折旧的程序等?
我意识到这set -o posix
将禁用非POSIX用法,但这不会告诉我我想知道的事情,例如zsh索引从1开始的shell数组,从0开始的bash索引,以及ash根本不支持数组。
Answers:
有杂乱无章的行为。在Debian上,它作为软件包维护工具的一部分提供。
在dash和posh下测试您的脚本。两者都有一些非POSIX构造,但是如果您的脚本在两者中都可以使用,则很可能在大多数地方都可以使用。(需要注意的是,由于典型的shell脚本往往会有很多极端情况,因此很难对其进行测试。)
如果您打算将脚本移植到嵌入式Linux平台,请使用BusyBox对其进行测试。注意,BusyBox可能受到或多或少的限制,具体取决于所需的嵌入式系统的大小。脚本依赖某些BusyBox安装所没有的功能是很正常的。
请注意,不可移植性不仅来自外壳程序,还来自外部实用程序。OpenBSD和Solaris往往具有带有POSIX功能的实用程序,并且功能不多,因此非常适合测试可移植性。
您将要参考POSIX规范,以及该线程中提到的其他资源(尤其是autoconf手册)。但这只是文档,如果您意外使用某个功能将无济于事。