大多数Linux发行版默认包含bash shell,但您也可以切换到另一个shell环境。 Zsh是一种特别受欢迎的替代品,还有其他的外壳,如灰,短划线,鱼和tcsh。但有什么区别,为什么会有这么多?

贝壳做什么?

当您在命令行登录或在Linux上启动终端窗口时,系统将启动shell程序。 Shell提供了扩展命令行环境的标准方法。如果您愿意,可以将默认shell替换为另一个shell。

第一个shell环境是Thompson Shell,由贝尔实验室开发并于1971年发布。从那时起,Shell环境一直在构建这个概念,增加了各种新功能,功能和速度改进。

例如,Bash提供命令和文件名完成,高级脚本功能,命令历史记录,可配置颜色,命令别名以及1971年第一个shell发布时无法提供的各种其他功能。

shell还通过各种系统服务在后台使用。 Linux发行版包含许多以shell脚本编写的函数。这些脚本是通过shell环境运行的命令和其他高级shell脚本函数。

贝壳导致Bash:sh,csh,tsh和ksh

最着名的现代贝壳祖先是Bourne贝壳 - 也被称为“sh” - 它的创始人斯蒂芬伯恩以其在AT&T贝尔实验室工作的名字命名。它于1979年发布,它成为Unix中的默认命令解释器,因为它支持命令替换,管道,变量,条件测试和循环,以及其他功能。它没有为用户提供太多定制,并且不支持诸如别名,命令完成和shell函数之类的现代细节(尽管最后添加了最后一个)。

C shell,或“csh”,是由加州大学伯克利分校的Bill Joy于20世纪70年代后期开发的。它添加了许多用户可以控制其系统的交互元素,如别名(长命令的快捷方式),作业管理功能,命令历史记录等。它是用C编程语言建模的,这是Unix操作系统本身编写的。这也意味着Bourne shell的用户必须学习C才能在其中输入命令。此外,csh还有很多错误,必须在很长一段时间内被用户和创作者敲定。人们最终使用Bourne shell作为脚本,因为它更好地处理了非交互式命令,但坚持使用C shell进行正常使用。

随着时间的推移,很多人修复了错误并为C shell增加了功能,最终改进了csh的改进版本,称为“tcsh”。但是csh仍然是基于Unix的计算机的默认设置,并添加了一些非标准功能。来自贝尔实验室的David Korn参与了KornShell或“ksh”,它试图通过向后兼容Bourne shell的语言来改善这种情况,但是从csh shell中添加了许多功能。它于1983年发布,但是在专有许可下。它不是免费软件,直到2000年代,它是在各种开源许可下发布的。

bash的诞生

Unix或POSIX的可移植操作系统接口是对繁忙的专有csh实现的另一种回应。它成功地创建了命令解释标准(以及其他内容)并最终镜像了KornShell中的许多功能。与此同时,GNU Project试图创建一个免费的,与Unix兼容的操作系统。 GNU项目开发了一个免费软件shell,作为其免费操作系统的一部分,并将其命名为“Bourne Again Shell”或“bash”。

自1989年首次发布以来,Bash在几十年内得到了改进,但它仍然是当今大多数Linux发行版的默认外壳。它也是Apple的macOS上的默认shell,可以在微软的Windows 10上安装。

较新的贝壳:灰,短划线,zsh和鱼

虽然Linux社区多年来已经确定了Bash,但是当Bash于28年前首次发布时,开发人员并没有停止创建新的shell。

Kenneth Almquist创建了一个名为Almquish shell,A Shell,“ash”或有时只是“sh”的Bourne shell克隆。它也与POSIX兼容,并成为BSD的默认shell,这是Unix的一个不同分支。 ash shell比bash更轻量级,这使它在嵌入式Linux系统中很受欢迎。如果你有安装了BusyBox的root用户手机 - 或任何其他带有BusyBox软件套件的设备 - 它使用的是灰烬代码。

Debian开发了一个基于灰的shell环境,称之为“破折号”。它的设计符合POSIX标准且轻量级,因此它比Bash更快,但不具备所有功能。 Ubuntu使用破折号外壳作为非交互式任务的默认外壳,加快了shell脚本和后台运行的其他任务。但是,Ubuntu仍然使用bash作为交互式shell,因此用户仍然拥有功能齐全的交互式环境。

最受欢迎的新shell之一是Z shell或“zsh”。由Paul Falstad于1990年创建,zsh是一款Bourne风格的shell,包含了你在bash中可以找到的功能,甚至更多。例如,zsh具有拼写检查功能,能够监视登录/注销,一些内置编程功能(如字节码),支持语法中的科学记数法,允许浮点运算以及更多功能。

另一个较新的shell是2005年发布的Friendly Interactive Shell或“fish”。它具有独特的命令行语法,旨在更容易学习,但不是从Bourne shell或C shell派生的。这是一个有趣的想法,但是你通过使用fish学到的东西不一定能帮助你使用bash和其他Bourne派生的shell。

你应该选择哪个? (以及为什么Zsh很受欢迎)

您不需要选择shell。您的操作系统会为您选择默认shell,并且该选择几乎总是bash。坐在Linux发行版前面 - 甚至是Mac发行版 - 你几乎总是有一个bash shell环境。 Bash有很多高级功能,但除非你编写shell脚本,否则你可能不会使用它们。

在嵌入式Linux系统或BSD系统上,你最终会得到灰壳。但是灰烬是一种基于Bourne的外壳,并且与bash基本兼容。使用bash的任何知识都将转移到使用ash或dash shell,尽管这个轻量级shell中没有一些高级脚本功能。

您将遇到的几乎每个shell都是基于Bourne的,并且工作方式类似 - 包括zsh。

这就是zsh很受欢迎的原因。这个较新的shell与bash兼容,但包含更多功能。 zsh shell提供内置的拼写纠正,改进的命令行完成,可加载的模块作为shell的插件,全局别名允许您在命令行上替换文件名或其他任何内容,而不仅仅是命令,以及更多主流支持。它就像bash,但是如果你在命令行上花了很多时间,你可能会欣赏很多附加功能,附加功能和可配置选项。

如果您熟悉bash,则可以在不学习其他语法的情况下切换到zsh - 您只需获得其他功能。如果你熟悉zsh,你可以在不学习不同语法的情况下切换到bash - 你将无法访问这些功能。

“哦,我的ZSH”是一个工具,可以帮助您更轻松地启用zsh插件并在预制主题之间切换,快速自定义zsh shell而无需花费数小时调整内容。

还有其他炮弹。例如,tcsh shell仍然存在,仍然是一个选项。 FreeBSD使用tsch作为默认的root shell,使用ash作为默认的交互式shell。如果您经常使用C编程,那么tsch可能更适合您。但是,它远没有像bash或zsh那样常用。

如何在壳之间切换

可以很容易地切换到新的shell来试用它。只需从Linux发行版的软件包管理器安装shell,然后输入命令即可启动shell。

例如,假设您想在Ubuntu上尝试zsh。您将运行以下命令来安装然后启动它:

sudo apt install zsh zsh

然后你会坐在一个zsh shell上。输入“ exit “在shell处离开它并返回当前的shell。

这只是暂时的。无论何时打开新的终端窗口或在命令行登录系统,您都会看到默认的shell。要更改登录时看到的shell(称为登录shell),通常可以使用 chsh ,或“更改壳牌”,命令。

要使用此命令,首先需要使用which命令查找shell的完整路径。例如,假设我们想要更改为zsh shell。我们运行以下命令:

which zsh

在Ubuntu上,这告诉我们zsh二进制文件存储在/ usr / bin / zsh中。

运行以下命令,输入密码,系统将提示您选择新的登录shell:

chsh

根据上面的命令,我们进入 /usr/bin/zsh 。然后zsh shell将成为我们的默认值,直到我们运行 chsh 命令并将其更改回来。

重要提示:
编辑点评: