为什么bash在Linux上是标准的?


19

最新的Linux发行版将bash作为默认外壳,尽管还有其他(可以说)更好的外壳可用。

我试图了解这是否是一些人都不想更改的历史遗留物,还是有一些充分的理由使bash成为首选?


19
出售的大多数计算机都安装了MS Windows,尽管还有其他一些更好的OS。
choroba 2012年

重击很简单。它通常可以执行用户想要执行的所有操作。您可以轻松切换它。默认情况下拥有scsh不会很有趣。
cnd 2012年

4
Bash是UNIX标准的OSS实现/bin/sh,它是'普通'UNIX-es上的默认外壳...
Jan Marek

我知道这是一个Wiki链接,但它会深入回答您的问题,一个外壳比另一个外壳有什么en.wikipedia.org/wiki/Unix_shell
whoami 2012年

6
更好地定义(可以说)。我认为这bash是最好的外壳程序,因为我非常了解它,并且它无处不在,简洁,相对容易地完成了我需要的所有操作,易于阅读,并且人们可以在不了解如何创建bash脚本的情况下理解它。您还想从外壳中得到什么?如果您需要大量的编程功能,那么您使用的外壳不正确。
nicerobot 2012年

Answers:


18

简短的答案是因为linux实际上是GNU / Linux。只有内核是linux,但是提供类似Unix环境的实用程序的基本集合是由GNU提供的,而GNU shell是bash,
正如我所说的,这是简短的答案;)

编辑以添加一些其他注释...
让我在开头打个招呼,说我不是Unix历史学家,所以我只能回答恕我直言

有几点,首先,bash是厨房的贝壳,就像emacs对编辑器一样。
在bash发行之时,尚无免费的ksh实现,tcsh是免费的csh替代品,但Stallman对csh的shell编程大为反对。
作为一个交互式shell,bash具有出色的历史记录/命令回忆功能,并且可以保存会话之间的历史记录。它是替换shell编程的sh,bsh,ksh的代名词,并且是一个不错的交互式shell。
就像下雪的雪球一样,bash获得了动力和大小。

是的,还有许多其他的炮弹。更好地适合个人目的或口味的贝壳,但对于单个围绕贝壳的锤子来说,做得不错,并且在20多年来一直关注着它。


我明白。但是,大多数发行版都包含许多其他非GNU软件。在我看来,使用bash只是因为使用了bash,就像choroba认为Windows是占主导地位的OS。但是,几十年来,Windows一直具有更好的硬件支持(驱动程序),这使得很难切换到其他操作系统。我看不到Bash提供了哪些独特功能来阻止用户切换?
米兰·巴布斯科夫2012年

+1和一个好人@bdowning来回答简短的问题:-)
Nikhil Mulley,2012年

2
@MilanBabuškov 必须安装Bash,因为有太多使用bash特定功能的脚本。一旦从该假设开始,就必须证明其他外壳的合理性。Dash包括在Ubuntu之类的Disto中,作为减少启动时间计划的一部分。鉴于bash作为交互式外壳程序“足够好”,没有其他外壳程序提供足够强大的参数以成为默认程序包加载的一部分。
ssokolow

12

Bash有一些潜在的竞争对手:

  • 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不太兼容。

而且bash是官方的GNU Shell,Linux系统实际上是GNU / Linux:即使最著名的部分Linux内核不是,许多核心程序也来自GNU。当bash成为事实上的标准时,bash是众所周知的,具有正式地位,并具有一系列不错的功能。


据我了解,POSIX标准在/ bin / sh中指定了Bourne Shell的必需功能,并且大多数Linux发行版都依赖于编写使用Bourne Shell的Shell脚本。BASH是Bourne shell的增强版本,/ bin / sh实际上是/ bin / bash的链接,执行时仅使用Bourne shell功能运行。
bgvaughan 2012年

@bgvaughan一些发行版本将bash视为/bin/shash,其他发行版本将bash作为ash。例如Ubuntu的/bin/sh已经dash(灰分的叉保持Debian是)一段时间。Bash具有更多功能,Ash更小,更快。两者都符合POSIX(或至少在实践中足够符合)。
吉尔(Gilles)'所以

4

最简单的答案?因为某些东西“必须”是默认值。最明智的默认设置是大多数用户已经习惯的默认设置。在这一点上,Bash是一个不错的选择。每个人都可以自由选择世界上最好的。如果默认值始终能够满足他们的要求,大多数人会选择使用默认值。


3

来自DOS(安装了doskey),我真的错过了仅通过向上/向下移动光标来调出最后一个命令的功能。BASH是IMO在* nix上实现此功能的第一个shell。

因此,这一代以后的大多数人可能都喜欢bash。


虽然直到1990年代才使用计算机,但我假设这tcsh是第一个使用箭头键来回浏览历史的* nix shell。
安东尼·G-莫妮卡的大法官

1

所有其他答案都是很好的,但是从实际的角度来看:如果我坐在一个陌生的系统前面(或远程访问它)并且需要做一些事情,那么我可以指望除最旧的系统之外的所有bash都可以使用bash。我可以继续做下去。

正如在其他答案和您的问题中指出的那样,还有很多其他shell(我听说过很多有关zsh的好东西,但是还没有尝试过。),但是它们在语法和使用的命令方面有所不同把事情做好。如果我只是想完成某件事,那么bash就足够棘手,而无需适应另一个shell。

另外,当我编写通常可能有用的shell脚本时,我为bash编写了该脚本,并且我知道,如果我非常注意不要做与系统有关的事情,它将几乎在任何地方运行。


1

惯性。

当Linux(GNU / Linux,如果您愿意的话)系统开始出现时,Bash恰好是最容易获得的免费shell。它来自GNU项目的事实并没有受到伤害。

至于为什么它仍然是默认的shell,从来没有足够好的理由来更改它。即使其他外壳程序更好,在不同发行版中使用相同的默认登录外壳程序也具有优势,并且很难使所有人(Debian,Red Hat,Suse等)都同意切换到其他外壳程序。

毕竟,这只是默认设置。任何用户都可以chsh用来更改其登录外壳。无需为每个人更改默认值。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.