Bash 清单:何时编写可移植/POSIX兼容的shell代码?
许多shell开发人员在开发可移植代码方面花费了大量精力,例如避免了bashism,我想知道这种增加的精力在多大程度上真正有助于遵守软件需求 我想知道是否有可能给出一个简单的清单,列出需要可移植代码的条件。让我们假设Bash 清单:何时编写可移植/POSIX兼容的shell代码?,bash,shell,architecture,posix,portability,Bash,Shell,Architecture,Posix,Portability,许多shell开发人员在开发可移植代码方面花费了大量精力,例如避免了bashism,我想知道这种增加的精力在多大程度上真正有助于遵守软件需求 我想知道是否有可能给出一个简单的清单,列出需要可移植代码的条件。让我们假设 使用shell而不是$BETTER\u LANGUAGE实际上是有意义的 每个shell在所有目标系统上都有相同的版本(即shell版本差异不是可移植性的一部分) 目前不考虑可读性/可变性(可移植代码可能比最新的Bash RegEx功能更容易阅读/理解) 到目前为止,我想到的是
- 使用shell而不是
实际上是有意义的$BETTER\u LANGUAGE
- 每个shell在所有目标系统上都有相同的版本(即shell版本差异不是可移植性的一部分)
- 目前不考虑可读性/可变性(可移植代码可能比最新的Bash RegEx功能更容易阅读/理解)
- 代码实际上(或可能在将来)是在不同的shell中有意执行的(例如,因为目标平台限于不同的shell,或者因为代码将来可能必须在更快的shell(如
dash
)中执行),并且提供不同的实现是不可行的 - 代码是一个框架的一部分,其目标是自身可移植
- 代码是源代码包的一部分,必须可以在各种平台上构建
- 该软件作为一个包分发给各种目标系统,开发人员不希望引入对特定shell的依赖
bash
作为依赖项,那么就不会有*NIX管理员的麻烦:bash
通常是安装在此类系统上的第一个第三方软件包。此外,与其他第三方软件相比,bash
(与其他流行的shell一样,例如csh
,tcsh
,ksh
)实际上没有安装和依赖性问题
POSIX合规性是否需要与一般可移植性不同的检查表
没有“通用可移植性”这样的东西。可移植性总是很特别
广义的软件可移植性是指软件在两个或多个不同的操作系统上运行的能力。POSIX是一种操作系统标准,定义了面向用户和软件开发人员的操作系统接口的一部分。它是一个平台基础,不是它自己的平台。
POSIX合规性要求我只在一些利基市场见过。通常是因为它是唯一存在的操作系统ISO标准
对于没有“POSIX合规性”硬要求的软件,通常建议针对特定平台。共同点可能仍然是POSIX标准,但特定于操作系统的功能、定制和处理只是让软件更适合特定平台的用户
最终,用户并不关心POSIX。POSIX是开发人员的工具。开发人员使用它来降低开发和维护多平台软件的成本。因此,来自用户的需求是对特定平台的支持,而不是“POSIX合规性”