为什么bash在大多数操作系统(Ubuntu,Fedora,OSX等)中是默认外壳?为什么许多高级用户大多使用zsh?如果这么好,为什么不是默认值呢?
我都使用了,我的所有任务都很简单:)
为什么bash在大多数操作系统(Ubuntu,Fedora,OSX等)中是默认外壳?为什么许多高级用户大多使用zsh?如果这么好,为什么不是默认值呢?
我都使用了,我的所有任务都很简单:)
Answers:
我对此进行了一些阅读,得出的结论似乎是它是GNU的默认外壳(大多数基于Linux的操作系统使用的),因此只是作为GNU的一部分打包了,同时还具有20年的开发使其成为GNU的一部分。稳定且全面,它是最全面的工具,可以满足除最高级用户以外的所有用户的需求。
有关更多信息,请阅读为什么bash在Linux上是标准的?(在Unix和Linux上是相同的问题)。
只是为此添加了更多内容,还有许多其他的shell可以尝试,如果您感兴趣的话,请从以下答案中获取一些内容:
Zsh具有更高级的交互功能,但是在脚本编写方面有一些古怪之处(现在还不及以前)。在1990年代初至Linux初期,zsh几乎是未知的。
KSH是自上世纪80年代中期商用Unix系统的事实标准,但它是专有软件,直到2000年,所以没有在Linux上的一个选项。而且,与bash相比,ksh具有低于标准的命令行编辑功能。
Pdksh是ksh的免费克隆版本,它是一种选择,但它并不为人所知,并且命令行版本的功能也很差。(尽管ATT ksh是免费的,但即使在某些BSD中仍使用Pdksh,它也不再是一个非常活跃的项目。)
一些发行版将ash变体安装 为
/bin/sh
。Ash(我的意思是指称为ash的任何松散的shell系列)被设计为体积小,速度快,没有交互功能(仅用于编辑脚本)。灰烬复兴是相对较新的。在1990年代,现有的变体缺乏很多功能。在zsh出现之前,Tcsh是最先进的交互式shell,但它与sh不兼容,而与scripting不太兼容。
伯恩壳牌(SH的Unix的AT&T分支的在天回)后进行了改进,通过Korn外壳,所取代的ksh。ksh也来自AT&T贝尔实验室,而不是GPL(当前版本是Eclipse Public License)。C-shell csh来自Unix的Berkeley版本,并且不是GPL(BSD许可证),并且使用了与sh不同的语法。Z-shell zsh是对sh的改进,但不是GPL(类似于MIT的许可证)的改进。Bash是对sh的改进,使用了GPL和GNU。仅凭许可证,Bash可能会成为GPL操作系统的选择。特别是外壳是发行版的核心部分。
但是Bash还是一个GNU项目,我认为它比Berkeley Unix或AT&T Unix的遗留产品为它提供了更积极的开发和更轻松的贡献。可以很好地证明zsh比Bash更好,并且已经成为更好的shell,但不足以克服zsh的不同许可证和非GNU项目状态。
早在Linux发行版首次出现并选择其默认外壳时(到90年代中期),就没有github(2008)或SourceForge(1999)了。到那时,我认为GNU项目在吸引和吸引新开发人员以及吸引新开发人员方面比非GNU项目具有真正的优势。因此发行人可以将Z-shell视为更好的产品,但也希望Bash能够获得良好的支持和维护,并且还添加了更多功能,使其可以赶上zsh。
既然Bash拥有多年的默认状态,它已成为事实上的标准,并撰写了有关它的书籍。有一本书涵盖了Bash和Z-shell,但是没有一本书专门介绍了Bash,而有很多书涵盖了Bash。
并且在这一点上,如果发行版要更改现有系统升级的默认设置,则会破坏设置,因为某些初始化文件具有不同的名称(例如.bashrc与.zshrc),并且文件的内容可能具有不兼容的语法。因此,他们将非常不愿意这样做,而将新的下载保留为zsh作为默认设置,而将其升级保留为bash。同一发行版的两种不同默认值可能是他们不希望支持的,用户/公司也同样不想处理。
Unix shell语言都很丑陋。特别是(csh
),有些可能少一些(ksh
?我实际上不知道),但实际上,在涉及大型项目的可读性和刚性等方面时,它们都无法接近精心设计的通用语言,例如Python,C#或Haskell。因此,当您想要固体时,您将永远不会选择任何一种带壳口味。
当您想快速完成简单的工作时,您确实选择了它们。为此,您需要:
sh
兼容性在这里是一大优势,而且再次流行越多越好。因此,您会发现,与通用语言相比,在这些Shell语言中,普及是一个更大的问题。因此,即使ksh
它本身是一种“更好”的语言,但如果它bash
更受欢迎(实际上在相关领域,因为它首先被选为默认语言),使用它的话并没有太多优势。对于GNU)。
进行切换的人员都非常刻意,并且经验丰富,可以轻松地切换到自己喜欢的外壳。OTOH,一个被迫使用不太流行的外壳的菜鸟,如果他们向互联网索要东西,但它却无法正常工作,将很快感到困惑。因此,任何发行版不仅针对Unix老手,如果发行bash
除标准之外的其他任何东西,都将冒相当大的风险,这是相对较少的人将从中受益的一步(只有一点点)。
IMO是“临界质量”的主要答案。Bash不仅用于命令行工作,还用于脚本编写,并且那里有大量的Bash脚本。不管现在交互的替代方法有多么好,能够“即插即用”这些脚本的需求都比这些优势更为重要。因此,现在唯一可以实际取代Bash的外壳是完全向后兼容的外壳,而最有可能的候选对象是Bash的下一个版本。
ksh
,那么大多数人使用不同的外壳也是正确的,这本身就可以解释为什么ksh
不是默认外壳。但是我不认为这是原因,让我们等待一些肯定的回答,我相信这个问题将会收到。