为什么没有人使用真正的 Bourne shell 作为 /bin/sh?

为什么没有人使用真正的 Bourne shell 作为 /bin/sh?

我注意到基本上我使用过的系统都没有/bin/sh真正的可执行文件。它始终是 POSIX 模式下的dash符号链接bash或类似的东西。

为什么?使用真实的原创有什么缺点/bin/sh? (速度?许可?)

答案1

我猜想缺乏功能 - 没有命令历史记录,没有花哨的重定向,没有命令行编辑。由于这些原因,BSD 引入了cshC shell。另一个因素是正版 Bourne Shell 只是最近以开源形式提供。除非您获得许可,否则您无法分发它。这使得它超出了免费发行版的范围,也使得它在意识形态上不适合其他发行版和*BSD。

但是代码可用现在。你可以看一下、编译它、试一试。

答案2

你的问题中的陈述是不正确的。 Solaris 最高版本 10提供传统的真正的 Bourne shell 作为/bin/sh.这样做不是为了破坏与旧脚​​本的兼容性,因为旧脚本在不同的 shell 中可能会失败。但除此之外,这个选择还是非常令人沮丧的。

大多数(如果不是全部)剩余的 Unix 和类 Unix 版本(包括 Solaris 11)确实提供了 POSIX 兼容 shell,因为/bin/shPOSIX 要求sh命令启动 POSIX shell,而不是不兼容的旧版 Bourne shell。/bin/sh一般是:

  • ksh88或者ksh93在商业 Unix 实现上
  • 修改bashOS/X(虽然以前是zsh
  • 一个ashpdksh其他的衍生物BSDs
  • bashdash在 Gnu/Linux 发行版上。

它不一定是链接,但可以是除 Gnu/Linux 之外的许多系统上的真正可执行文件。

有趣的是,尽管对你的问题提出了最受支持的答案,但并不是缺乏功能导致发行版开发人员安装与旧版 Bourne shell 不同的东西,/bin/sh而是希望尽可能兼容 POSIX,即表现得像一个类似 Unix 的操作系统。 POSIX shell 比旧版 Bourne shell 具有更多功能这一事实只是此标准合规性目标的副作用。

值得注意的是bash,某些 shell 在调用时的行为有所不同sh,这主要是从 shell 中删除功能,而不是相反。

答案3

据我所知,原始的 Bourne shell 不能被 BSD 和 GNU 项目使用,因为它的许可证。

当时最初的 Unix 没有许可证,GNU 项目需要一个 GPL 下的 shell,所以他们使用了 bash。

对于所有 BSD 的父级 BSD4 来说也是如此。由于 AT&T 的诉讼,他们需要重写原始 Unix 的所有源代码,包括 Bourne shell。

在传统的 BSD 系列中,Bourne shell 一直到 4.3BSD-Reno 为止(但 Net/2 和后续的 4.4BSD 不再提供)。由于许可原因,它随后被 Kenneth Almquist(通常称为 ash)的 bourne 兼容、类似 svr4 的 sh 所取代。

来自 FreeBSDman sh

sh 命令,即 Thompson shell,出现在版本 1 AT&T UNIX 中。它在版本 7 AT&T UNIX 中被 Bourne shell 取代,Bourne shell 继承了名称 sh。

这个版本的 sh 是在 1989 年根据 AT&T System V Release 4 UNIX 的 Bourne shell 在 BSD 许可下重写的

因此,这两个项目都被迫不使用 Bourne shell,而选择真正的开源 shell。

答案4

它与提供 100%向后兼容性。您不会失去原始 shell 所具有的任何内容,但会在其基础上获得更多功能。没有任何缺点,为什么要错过新功能呢?这/bin/vi与通常链接到的原因相同维姆

相关内容