在shell脚本中避免“ BASH-isms”


37

是否存在类似于Perl :: Critic的工具,该工具将检查您的Shell脚本并指出缺陷,可移植性问题,使用无故障的非标准程序,使用折旧的程序等?

我意识到这set -o posix将禁用非POSIX用法,但这不会告诉我我想知道的事情,例如zsh索引从1开始的shell数组,从0开始的bash索引,以及ash根本不支持数组。

Answers:


36

杂乱无章行为。在Debian上,它作为软件包维护工具的一部分提供

dashposh下测试您的脚本。两者都有一些非POSIX构造,但是如果您的脚本在两者中都可以使用,则很可能在大多数地方都可以使用。(需要注意的是,由于典型的shell脚本往往会有很多极端情况,因此很难对其进行测试。)

如果您打算将脚本移植到嵌入式Linux平台,请使用BusyBox对其进行测试。注意,BusyBox可能受到或多或少的限制,具体取决于所需的嵌入式系统的大小。脚本依赖某些BusyBox安装所没有的功能是很正常的。

请注意,不可移植性不仅来自外壳程序,还来自外部实用程序。OpenBSD和Solaris往往具​​有带有POSIX功能的实用程序,并且功能不多,因此非常适合测试可移植性。

您将要参考POSIX规范,以及该线程中提到的其他资源(尤其是autoconf手册)。但这只是文档,如果您意外使用某个功能将无济于事。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.