清单:何时编写可移植/POSIX 兼容的 shell 代码?
Checklist: When to write portable / POSIX-compliant shell code?
许多 shell 开发人员花费大量精力开发可移植代码,例如避免 Bash 主义,我想知道这种增加的努力对满足软件要求的真正贡献有多大。
我想知道是否可以给出一个需要可移植代码的条件的简单清单。让我们假设
- 使用 shell 而不是
$BETTER_LANGUAGE
实际上是有道理的,
- 每个 shell 在所有目标系统上都有相同的版本(即 shell 版本差异不是可移植性的一部分),
- 暂时不考虑 readability/changeability(可移植代码可能比例如最新的 Bash RegEx 功能更容易阅读/理解)。
到目前为止我想到的是:
- 代码实际上(或可能在将来)并有意在不同的 shell 中执行(例如,因为目标平台仅限于不同的 shell,或者因为代码可能必须像将来
dash
那样以更快的 shell 执行)并且提供不同的实现是不可行的。
- 代码是旨在自身可移植的框架的一部分
- 代码是源包的一部分,必须可以在各种平台上构建
- 该软件作为各种目标系统的软件包分发,开发人员不想引入对特定 shell
的依赖
是否有任何我没有想到的明显条件,或者可以更笼统地表达它们? POSIX 合规性是否需要与一般可移植性不同的清单?有什么文献或其他资源可以推荐吗?
I wonder how much this increased effort really contributes to compliance with software requirements.
这 - "this increased effort" - 表明选择 shell 作为编程语言首先是错误的。 Shell 是管道语言:您不在其中实现工具 - 您用它控制其他工具。如果一个shell脚本需要很长时间开发,如果你运行进入POSIX的限制shell,那么shell很可能是错误的语言。
唯一的例外,也是您的清单中缺少的东西,是一个裸露的环境,就像新安装的一样,商业 UNIX 系统(可能还有一些 *BSD 系统)。如果您为此类系统开发软件,那么您可能必须使用 POSIX shell,因为可能实际上没有安装其他任何东西(如字面上的 "literally nothing")系统.
最后,所有软件都附带依赖项和先决条件列表。如果您将 bash
作为依赖项包含在内,那么 *NIX 管理员就不会打扰了:无论如何,bash
通常是安装在此类系统上的第一个 3rd 方包。此外,与其他第 3 方软件相比,bash
(与其他流行的 shell 一样,例如 csh
、tcsh
、ksh
)实际上没有安装和依赖问题。
Would POSIX compliance require a different checklist than general portability?
没有"general portability"这样的东西。便携性总是特别。
广义上的软件可移植性是指软件在两个或多个不同操作系统上 运行 的能力。 POSIX 是一个操作系统标准,为用户和软件开发者定义了一部分 OS 接口。它是一个平台基础,而不是一个平台。
POSIX 合规要求我只在一些利基市场看到过。通常仅仅是因为它是唯一存在的操作系统 ISO 标准。
对于没有"POSIX compliance"硬性要求的软件,一般建议针对特定平台。共同点可能仍然是 POSIX 标准,但 OS 特定功能、自定义和处理只是让软件更适合特定平台的用户。
说到底,用户不关心POSIX。 POSIX 是开发人员的工具。开发人员使用它来降低开发和维护多平台软件的成本。因此,来自用户的需求是特定平台的支持,而不是 "POSIX compliance".
许多 shell 开发人员花费大量精力开发可移植代码,例如避免 Bash 主义,我想知道这种增加的努力对满足软件要求的真正贡献有多大。
我想知道是否可以给出一个需要可移植代码的条件的简单清单。让我们假设
- 使用 shell 而不是
$BETTER_LANGUAGE
实际上是有道理的, - 每个 shell 在所有目标系统上都有相同的版本(即 shell 版本差异不是可移植性的一部分),
- 暂时不考虑 readability/changeability(可移植代码可能比例如最新的 Bash RegEx 功能更容易阅读/理解)。
到目前为止我想到的是:
- 代码实际上(或可能在将来)并有意在不同的 shell 中执行(例如,因为目标平台仅限于不同的 shell,或者因为代码可能必须像将来
dash
那样以更快的 shell 执行)并且提供不同的实现是不可行的。 - 代码是旨在自身可移植的框架的一部分
- 代码是源包的一部分,必须可以在各种平台上构建
- 该软件作为各种目标系统的软件包分发,开发人员不想引入对特定 shell 的依赖
是否有任何我没有想到的明显条件,或者可以更笼统地表达它们? POSIX 合规性是否需要与一般可移植性不同的清单?有什么文献或其他资源可以推荐吗?
I wonder how much this increased effort really contributes to compliance with software requirements.
这 - "this increased effort" - 表明选择 shell 作为编程语言首先是错误的。 Shell 是管道语言:您不在其中实现工具 - 您用它控制其他工具。如果一个shell脚本需要很长时间开发,如果你运行进入POSIX的限制shell,那么shell很可能是错误的语言。
唯一的例外,也是您的清单中缺少的东西,是一个裸露的环境,就像新安装的一样,商业 UNIX 系统(可能还有一些 *BSD 系统)。如果您为此类系统开发软件,那么您可能必须使用 POSIX shell,因为可能实际上没有安装其他任何东西(如字面上的 "literally nothing")系统.
最后,所有软件都附带依赖项和先决条件列表。如果您将 bash
作为依赖项包含在内,那么 *NIX 管理员就不会打扰了:无论如何,bash
通常是安装在此类系统上的第一个 3rd 方包。此外,与其他第 3 方软件相比,bash
(与其他流行的 shell 一样,例如 csh
、tcsh
、ksh
)实际上没有安装和依赖问题。
Would POSIX compliance require a different checklist than general portability?
没有"general portability"这样的东西。便携性总是特别。
广义上的软件可移植性是指软件在两个或多个不同操作系统上 运行 的能力。 POSIX 是一个操作系统标准,为用户和软件开发者定义了一部分 OS 接口。它是一个平台基础,而不是一个平台。
POSIX 合规要求我只在一些利基市场看到过。通常仅仅是因为它是唯一存在的操作系统 ISO 标准。
对于没有"POSIX compliance"硬性要求的软件,一般建议针对特定平台。共同点可能仍然是 POSIX 标准,但 OS 特定功能、自定义和处理只是让软件更适合特定平台的用户。
说到底,用户不关心POSIX。 POSIX 是开发人员的工具。开发人员使用它来降低开发和维护多平台软件的成本。因此,来自用户的需求是特定平台的支持,而不是 "POSIX compliance".