为什么 bash 是大多数操作系统(Ubuntu、Fedora、OSX 等)的默认 shell?为什么很多高级用户大多使用 zsh?如果它那么好,为什么它不是默认的?
我两者都用,没看出有什么区别,因为我的所有任务都很简单:)
答案1
我对此进行了一些阅读,结论似乎是它是GNU(被大多数基于 Linux 的操作系统使用),因此只是作为 GNU 的一部分打包提供,同时又经过了 20 年的开发,使其变得稳定和全面,它简直就是最好的全能型产品,可以满足除最高级用户之外的所有用户的需求。
更多信息,请阅读为什么 bash 是 Linux 的标准?(Unix 和 Linux 上有同样的问题)。
再补充一点,还有很多其他的 shell 可以尝试,如果你有兴趣,下面是一些从这个答案:
扎什具有更先进的交互功能,但在脚本方面存在一些怪癖(现在比以前好多了)。在 20 世纪 90 年代初期,当 Linux 还处于起步阶段时,zsh 几乎不为人知。
肯尼亚自 20 世纪 80 年代中期以来,它一直是商业 UNICES 上的事实标准,但直到 2000 年它都是专有软件,因此在 Linux 上不是一种选择。此外,与 bash 相比,ksh 的命令行编辑功能较差。
普德克什,ksh 的一个免费克隆,本来是一个选择,但它并不出名,而且命令行编辑功能很差。(Pdksh 不再是一个非常活跃的项目,尽管它仍在一些 BSD 中使用,因为现在 ATT ksh 是免费的。)
有些发行版会安装 灰变体为
/bin/sh
。Ash(我指的是任何一种称为 ash 的松散 shell)设计得小巧快速,没有交互功能(仅用于编辑脚本)。Ash 的复兴相对较晚;在 1990 年代,现有的变体缺乏许多功能。
答案2
伯恩壳 (什AT&T Unix 分支的一个新版本被 Korn Shell 改进和取代,什.ksh 也来自 AT&T Bell 实验室,不是 GPL(当前版本是 Eclipse Public License)。C-shell,韓軟體来自伯克利版 Unix,也不是 GPL(BSD 许可证),而且使用的语法也与 sh 不同。Z-shell,嘚是对 sh 的改进,但不是 GPL(类似 MIT 的许可证)。Bash 是对 sh 的改进,使用 GPL 并来自 GNU。仅从许可证来看,Bash 可能是 GPL 操作系统的选择。特别是当 shell 是发行版的核心部分时。
但 Bash 也是一个 GNU 项目,我认为,与 Berkeley Unix 或 AT&T Unix 的传统产品相比,它的开发更为活跃,也更容易做出贡献。可以说,zsh 是比 Bash 更好的 shell,但还不足以克服其不同的许可证和非 GNU 项目状态。
当 Linux 发行版首次出现并选择其默认 shell 时(20 世纪 90 年代早期至中期),还没有 github(2008 年),甚至没有 SourceForge(1999 年)。那时,我认为 GNU 项目在获得关注、吸引和吸纳新开发人员方面比非 GNU 项目具有真正的优势。因此,发行版可以认为 Z-shell 更好,但同时也期望 Bash 将来能获得良好的支持和维护,并添加更多功能,使其能够赶上 zsh。
现在,Bash 已经拥有多年的默认地位,它已成为事实上的标准,并有关于它的书籍。一本涵盖 Bash 和 Z-shell 的书,但没有一本书专门介绍 zsh,而有多本介绍 Bash 的书。
此时,如果发行版要更改现有系统升级的默认设置,则会破坏设置,因为某些初始化文件具有不同的名称(例如 .bashrc 与 .zshrc),并且文件的内容可能具有不兼容的语法。所以他们很不愿意这样做,让新下载的 zsh 成为默认设置,而升级的 bash 则为默认设置。他们可能不想支持同一发行版的两个不同默认设置,用户/公司也不想处理这个问题。
答案3
Unix shell 语言都很丑陋。有些特别丑陋(csh
),有些可能丑陋一些(ksh
?我其实不知道),但实际上,当涉及到大型项目的可读性和刚性等方面时,没有一种语言可以接近设计良好的通用语言,例如 Python、C# 或 Haskell。所以,当你想要一些可靠的语言时,你永远不会选择任何一种 shell 风格。
当你想快速完成简单的事情时,你会选择它们。为此,你需要:
- 语法简洁,并且具有足够的一致性,因此您实际上可以记住它(查找速记运算符很困难)。如果您的 shell 安装在任何地方,那么这一点就很重要,因为您真的不想记住这些笨重的怪物中的一个。
- 良好的交互功能,因此您可以直接进入终端并使其正常工作,而无需在多个脚本文件之间切换。
- 能够从任何地方获取任何脚本片段并使其正常工作。
sh
兼容性是这里的一大优势,而且再次强调,越受欢迎越好。
所以你看,流行度在这些 shell 语言中比在通用语言中更重要。因此,即使它本身作为一种语言“更好”一点,如果它只是更流行一点(在相关领域它确实更流行,因为它最初被选为 GNU 的默认语言),那么ksh
使用它的优势就不大了。bash
那些真正做出转换的人是经过深思熟虑的,并且经验丰富,能够轻松地切换到他们最喜欢的 shell。另一方面,如果新手被迫使用不太流行的 shell,如果他们在互联网上询问某些东西而它不起作用,他们很快就会感到困惑。因此,任何不仅仅针对 Unix 老手的发行版,如果做出任何非标准的事情,都会承担相当大的风险bash
,而这一步只会让相对较少的人受益(而且受益很少)。
答案4
在我看来,“临界质量”是主要答案。Bash 不仅适用于命令行工作,还适用于脚本编写,并且有大量的 Bash 脚本。无论现在的替代方案在交互方面有多好,能够“即插即用”这些脚本的需求都超过了这些优势。因此,现在唯一能够真正取代 Bash 的 shell 是完全向后兼容的 shell,而最有可能的候选者是……下一个版本的 Bash。