Unix shell 之间的可移植性 - 我是否正确地考虑了这个问题?

2024-04-26

每当我编写 shell 脚本(主要是软件开发实用程序或构建工具)时,我通常都会尝试避免使用 bash,而倾向于使用普通的旧 sh 来实现可移植性。然而最近我遇到了越来越多的问题,其中有用的功能不可用,或者使用 sh 的系统之间的行为实际上不太一致,然后是使用 bash,因为 sh 是不同 shell 的别名......

据我了解,sh 是最古老的 Unix shell,精心编写的 sh 脚本理论上应该可以在几乎任何系统上运行......但似乎每个主要 shell 也有大约 9000 种不同的变体。使用 bash 作为脚本解释器是否会有效限制脚本的可移植性?当然,在 OS X 或几乎任何 Linux 上都没有问题,但是 BSD 呢? Solaris、AIX、HP-UX?如果你真的想什么都跑,你会怎么做?

我知道 bash 几乎可以安装在任何操作系统上,但它真的是所有相关现代系统上的一等公民吗?它是预安装的吗?我只是不太确定是否最好避免或拥抱 bash,以便获得最一致和可移植的整体体验。


如果你真的想什么都跑,你会怎么做?

您按照POSIX 标准sh http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html(以及您正在调用的工具)并希望目标操作系统也这样做。任何称为“UNIX”的现代产品都必须遵循此标准,并且通常(尽管不是普遍)标准 shell 将被称为/bin/sh。 BSD 和 Linux 发行版也倾向于以 POSIX 兼容性为目标。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unix shell 之间的可移植性 - 我是否正确地考虑了这个问题? 的相关文章