为什么 bash 是大多数操作系统中的默认 shell?

Tal*_*lal 39 default bash zsh history-of-ubuntu

为什么 bash 是大多数操作系统(Ubuntu、Fedora、OSX 等)中的默认 shell?为什么很多高级用户大多使用zsh?如果它那么好,为什么它不是默认值?

我使用两者我看不出有什么区别,因为我的所有任务都很简单:)

Mar*_*rby 35

我对此进行了一些阅读,结论似乎是它是GNU的默认 shell (由大多数基于 Linux 的操作系统使用),因此只是打包为 GNU 的一部分,同时还有 20 年的开发时间使它成为稳定和全面,它简直是最好的全能者,满足除最高级用户之外的所有需求。

有关更多信息,请阅读为什么 Linux 上的 bash 是标准?(Unix 和 Linux 上的相同问题)。

只是为了增加一点,还有很多其他的 shell 可以尝试,如果你有兴趣,这里有一些来自这个答案

  • Zsh有更先进的交互设施,但在脚本方面有一些怪癖(现在比以前少了)。在 1990 年代初到中期,Linux 还处于起步阶段,zsh 几乎无人知晓。

  • 自 1980 年代中期以来,Ksh是商业 unice 的事实上的标准,但直到 2000 年它才成为专有软件,因此不是 Linux 上的选项。此外,与 bash 相比,ksh 具有低于标准的命令行编辑功能。

  • Pdksh是 ksh 的免费克隆,本来是一个选项,但它并不广为人知,并且命令行编辑功能很差。(Pdksh 不再是一个非常活跃的项目,即使它仍然在一些 BSD 中使用,现在 ATT ksh 是免费的。)

  • 一些发行版将ash变体安装 为 /bin/sh. Ash(我的意思是任何一种称为 ash 的松散外壳家族)被设计成小而快,没有交互功能(它仅用于编辑脚本)。灰烬复兴相对较新;在 1990 年代,现有的变体缺乏很多功能。

  • 在 zsh 出现之前,Tcsh是最先进的交互式 shell,但它与 sh 不兼容,并且与 scripting 不太好


Sco*_*ter 9

Unix 的 AT&T 分支的 Bourne Shell(当时是sh)由 Korn Shell ksh改进并取代。ksh 也来自 AT&T 贝尔实验室,不是 GPL(当前版本是 Eclipse 公共许可证)。C-shell,csh来自 Unix 的 Berkeley 版本,也不是 GPL(BSD 许可证),并且使用与 sh 不同的语法。Z-shell,zsh是对 sh 的改进,但不是 GPL(类似 MIT 的许可证)。Bash 是 sh 的改进,使用 GPL 和来自 GNU。仅凭许可证,Bash 可能是 GPL 操作系统的选择。特别是外壳是发行版的核心部分。

但 Bash 也是一个 GNU 项目,我认为它比伯克利 Unix 或 AT&T Unix 的遗留产品更积极地开发,更容易做出贡献。一个很好的例子是 zsh 是并且一直是比 Bash 更好的 shell,但还不足以克服它的不同许可证和非 GNU 项目状态。

当 Linux 发行版首次出现并选择他们的默认 shell 时(90 年代初到中期),还没有 github(2008)甚至 SourceForge(1999)。在这一点上,我认为 GNU 项目比非 GNU 项目在获得关注和吸引新开发人员方面具有真正的优势。因此发行版可以将 Z-shell 视为更好,但也期望 Bash 将获得良好的支持和维护,并且还会添加更多功能,使其赶上 zsh。

既然 Bash 已经有多年的默认状态,它已经成为事实上的标准,有很多关于它的书。有一本涵盖 Bash 和 Z-shell 的书,但没有一本书专门涵盖它,而有很多书是针对 Bash 的。

在这一点上,如果发行版要更改现有系统升级的默认值,它会破坏设置,因为一些初始化文件具有不同的名称(例如 .bashrc 与 .zshrc)并且文件的内容可能具有不兼容的语法。所以他们会非常不愿意这样做,让新的下载以 zsh 作为默认值,并升级为 bash。同一个发行版的两个不同默认值是他们可能不想支持的,用户/公司也不想处理。