Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 清单:何时编写可移植/POSIX兼容的shell代码?_Bash_Shell_Architecture_Posix_Portability - Fatal编程技术网

Bash 清单:何时编写可移植/POSIX兼容的shell代码?

Bash 清单:何时编写可移植/POSIX兼容的shell代码?,bash,shell,architecture,posix,portability,Bash,Shell,Architecture,Posix,Portability,许多shell开发人员在开发可移植代码方面花费了大量精力,例如避免了bashism,我想知道这种增加的精力在多大程度上真正有助于遵守软件需求 我想知道是否有可能给出一个简单的清单,列出需要可移植代码的条件。让我们假设 使用shell而不是$BETTER\u LANGUAGE实际上是有意义的 每个shell在所有目标系统上都有相同的版本(即shell版本差异不是可移植性的一部分) 目前不考虑可读性/可变性(可移植代码可能比最新的Bash RegEx功能更容易阅读/理解) 到目前为止,我想到的是

许多shell开发人员在开发可移植代码方面花费了大量精力,例如避免了bashism,我想知道这种增加的精力在多大程度上真正有助于遵守软件需求

我想知道是否有可能给出一个简单的清单,列出需要可移植代码的条件。让我们假设

  • 使用shell而不是
    $BETTER\u LANGUAGE
    实际上是有意义的
  • 每个shell在所有目标系统上都有相同的版本(即shell版本差异不是可移植性的一部分)
  • 目前不考虑可读性/可变性(可移植代码可能比最新的Bash RegEx功能更容易阅读/理解)
到目前为止,我想到的是:

  • 代码实际上(或可能在将来)是在不同的shell中有意执行的(例如,因为目标平台限于不同的shell,或者因为代码将来可能必须在更快的shell(如dash)中执行),并且提供不同的实现是不可行的
  • 代码是一个框架的一部分,其目标是自身可移植
  • 代码是源代码包的一部分,必须可以在各种平台上构建
  • 该软件作为一个包分发给各种目标系统,开发人员不希望引入对特定shell的依赖
有没有什么明显的条件是我没有想到的,或者可以更笼统地表达出来?POSIX合规性是否需要与一般可移植性不同的检查表?你会推荐一些文献或其他资料吗

我想知道这一增加的工作在多大程度上真正有助于遵守软件需求

这“增加的工作量”表明,选择shell作为编程语言一开始是错误的。Shell是管道的语言:您不在其中实现工具,而是用它控制其他工具。如果开发shell脚本需要很长时间,如果遇到POSIX shell的限制,那么shell很可能是错误的语言

唯一的例外,也是清单中缺少的,是一个全新安装的商业UNIX系统(可能还有一些*BSD系统)的环境。如果您为这样的系统开发软件,那么您可能必须使用POSIX外壳,这仅仅是因为系统上可能没有安装任何其他软件(如字面上的“无”)

最后,所有软件都附带了依赖项和先决条件列表。如果将
bash
作为依赖项,那么就不会有*NIX管理员的麻烦:
bash
通常是安装在此类系统上的第一个第三方软件包。此外,与其他第三方软件相比,
bash
(与其他流行的shell一样,例如
csh
tcsh
ksh
)实际上没有安装和依赖性问题

POSIX合规性是否需要与一般可移植性不同的检查表

没有“通用可移植性”这样的东西。可移植性总是很特别

广义的软件可移植性是指软件在两个或多个不同的操作系统上运行的能力。POSIX是一种操作系统标准,定义了面向用户和软件开发人员的操作系统接口的一部分。它是一个平台基础,不是它自己的平台。 POSIX合规性要求我只在一些利基市场见过。通常是因为它是唯一存在的操作系统ISO标准

对于没有“POSIX合规性”硬要求的软件,通常建议针对特定平台。共同点可能仍然是POSIX标准,但特定于操作系统的功能、定制和处理只是让软件更适合特定平台的用户

最终,用户并不关心POSIX。POSIX是开发人员的工具。开发人员使用它来降低开发和维护多平台软件的成本。因此,来自用户的需求是对特定平台的支持,而不是“POSIX合规性”