当前位置: 首页>>技术教程>>正文


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

, , , ,

问题描述

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

我用这两个我看不出有什么不同,我的所有任务都很简单:)

最佳解决思路

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

有关更多信息,请阅读Why is bash standard on Linux?(Unix和Linux上的相同问题)。

只是为此添加一点,还有很多其他的shell可供尝试,如果你有兴趣,这里有几个from this answer

  • Zsh has more advanced interactive facilities, but a few quirks when it comes to scripting (less so now than back in the days). In the early to mid-1990s when Linux was in its infancy, zsh was virtually unknown.

  • Ksh was the de facto standard on commercial unices since the mid-1980s, but it was proprietary software until 2000, so not an option on Linux. Also, ksh had subpar command line editing capabilities, compared with bash.

  • Pdksh, a free clone of ksh, would have been an option, but it was not well-known and had poor command line edition capabilities. (Pdksh is no longer a very active project, even though it’s still used in some BSDs, now that ATT ksh is free.)

  • Some distributions install an ash variant as /bin/sh. Ash (by which I mean any of the loose family of shells called ash) is designed to be small and fast, with no interactive features (it’s only for editing scripts). The ash revival is relatively recent; in the 1990s the existing variants lacked a lot of features.

  • Tcsh was the most advanced interactive shell until zsh came along, but it’s incompatible with sh and not so good with scripting.

次佳解决思路

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

但Bash也是一个GNU项目,我认为,它比Berkeley Unix或AT& T Unix的传统产品更容易开发和贡献。一个非常好的案例可以说zsh是比Bash更好的shell,但还不足以克服它的不同许可和non-GNU项目状态。

当Linux发行版首次出现并选择他们的默认shell(90年代早期到中期)时,没有github(2008)甚至是SourceForge(1999)。那时候,我认为GNU项目比non-GNU项目在获得关注和绘图以及包括新开发人员方面具有真正的优势。因此,发行版可以更好地看待Z-shell,但也期望Bash将获得更好的支持和维护,并且还会添加更多功能,使其能够赶上zsh。

既然Bash已经有多年的默认状态,它就成了事实上的标准,并且有关于它的书籍。有one book that covers both Bash and Z-shell,但没有专门涵盖它的书,而Bash有多个这样做。

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2118.html,未经允许,请勿转载。