可移植 shell 编程的资源

Gil*_*il' 71 shell standard reference portability

有哪些可移植 shell 编程的资源?最终的答案是在所有目标平台上进行测试,但这很少实用。

POSIX /统一UNIX规范是一个开始,但它会告诉你没有什么支持每个实现的程度,也没有什么共同的扩展存在。您可以阅读每个实现的文档,但这非常耗时且不完全准确。

在我看来,理想的格式应该是 POSIX 规范的某种社区注释版本,其中每个功能都按其在不同实现中的支持级别进行注释。有这样的事情吗?或者还有其他有用的资源吗?

例如,有Sven Mascheck 的 shell portability pages,但它只涉及语法元素和一些内置函数,并且只涵盖旧 shell。我正在寻找更全面的资源。

Ric*_*rri 33

autoconf 手册有一节是关于 便携式 shell 编程的

尽管这不是专门针对 POSIX,但它可能是尝试编写可移植 shell 代码时该做什么和不该做什么的最完整的集合。

  • 这是最好的资源之一,是在用 M4 编写代码时构建的,必须生成可跨尽可能多的 shell 移植的 shell 代码。 (3认同)

小智 6

除了dashand 之外posh,还有bournesh(或bsh传家宝 Bourne Shell可用于检测Bashisms

传家宝项目还包括“传家宝工具箱”,它包含 100 多个标准 Unix 实用程序(可以作为比较命令行选项的起点)。

  • 请注意,Bourne shell 不是 POSIX shell,使您的脚本可移植到 Bourne shell 意味着将脚本的语法从标准 POSIX sh 语言降级为该语言与 Bourne shell 语法之间的共同点。除非您想移植到古老的系统(或 Solaris 10 及更早版本,并且您无法选择使用 /usr/xpg4/bin 中的标准 sh),否则不值得提出意见。 (2认同)

Phi*_*ath 5

此答案类似,请尝试在posh 中执行您的脚本。

另外,不要忘记将POSIXLY_CORRECT环境变量设置为 true,因为这会导致许多程序(不仅是 shell)更严格地遵守 POSIX 标准。