Linux 用户分为两种:谨慎型和冒险型。
一类用户几乎是本能地尝试所有新出现的选项。他们尝试过无数个窗口管理器、几十个发行版,以及他们能找到的每一个新的桌面小部件。
另一类用户则会坚持使用他们喜欢的东西。他们倾向于喜欢发行版的默认设置。如果他们对文本编辑器情有独钟,那一定是他们最先掌握的那个。
作为一名 Linux 用户,无论是在服务器端还是桌面端,至今已有十五年了,我绝对更倾向于第二类用户。我习惯于使用现有的东西,而且我喜欢这意味着我通常可以找到详尽的文档和示例,来解决我能想到的任何用例。如果我使用非标准的东西,那么这种切换一定是经过仔细研究的,并且往往是基于我信任的人的强烈推荐。
但这并不意味着我不喜欢偶尔尝试一下,看看自己错过了什么。所以最近,在使用 bash shell 多年而从未考虑过其他选择之后,我决定尝试四种替代 shell:ksh、tcsh、zsh 和 fish。这四种 shell 都很容易从我在 Fedora 中的默认存储库安装,而且它们很可能也已经为您的首选发行版打包好了。
下面简单介绍一下每种选项,以及您可能选择它作为您的下一个 Linux 命令行解释器的原因。
bash
首先,让我们回顾一下熟悉的 shell。GNU Bash,即 Bourne Again Shell,几乎在我这些年使用过的每个 Linux 发行版中都是默认 shell。Bash 最初于 1989 年发布,现已发展成为 Linux 世界中使用最广泛的 shell,并且在其他类 Unix 操作系统中也很常见。
Bash 是一款非常不错的 shell,当您在互联网上查找关于如何执行各种操作的文档时,几乎总是会找到假设您正在使用 bash shell 的说明。但是 bash 也有一些缺点,任何编写过超过几行 bash 脚本的人都可以证明这一点。这并不是说您不能做某事,而是说它的读写方式并不总是特别直观(或至少不够优雅)。有关一些示例,请参阅此常见的 bash 陷阱列表。
即便如此,bash 可能至少在不久的将来仍将继续存在,因为它拥有庞大的安装基础,以及无数已经熟悉其用法和怪癖的休闲和专业系统管理员。bash 项目在 GPLv3 许可证下提供。
ksh
KornShell,也以其命令调用名 ksh 而闻名,是 20 世纪 80 年代在贝尔实验室开发的一种替代 shell,由 David Korn 编写。虽然最初是专有软件,但后来的版本在 Eclipse Public License 下发布。
ksh 的支持者列举了他们认为 ksh 优越的一些方面,包括拥有更好的循环语法、来自管道的更清晰的退出代码、更简单的重复命令方式以及关联数组。它还能够模拟 vi 或 emacs 的许多行为,因此如果您特别喜欢某种文本编辑器,那么可能值得一试。总的来说,我发现对于基本输入而言,它与 bash 非常相似,但对于高级脚本编写而言,它肯定会是一种不同的体验。
tcsh
Tcsh 是 csh(即 Berkely Unix C shell)的衍生版本,其历史可以追溯到 Unix 和计算机的早期。
tcsh 的主要卖点是其脚本语言,对于任何用 C 语言编程过的人来说,这应该看起来非常熟悉。Tcsh 的脚本语言有人喜欢,也有人讨厌。 但它也具有其他功能,包括向别名添加参数,以及可能符合您偏好的各种默认设置,包括使用 Tab 键自动完成和历史记录 Tab 键完成的工作方式。
您可以在 BSD 许可证下找到 tcsh。
zsh
Zsh 是另一个与 bash 和 ksh 相似的 shell。Zsh 起源于 90 年代初期,具有许多有用的功能,包括拼写校正、主题、可命名的目录快捷方式、跨多个终端共享命令历史记录,以及对原始 Bourne shell 的各种其他细微调整。
zsh 的代码和二进制文件可以在类似 MIT 的许可证下分发,尽管部分代码在 GPL 下;有关详细信息,请查看实际许可证。
fish
当我访问 Friendly Interactive Shell fish 的网站时,看到它略带讽刺地描述为“终于,一款 90 年代的命令行 shell”——fish 是在 2005 年编写的,我就知道我会喜欢它。
fish 的作者提供了许多理由来促使您进行切换,所有理由都带有一点幽默感,并略微嘲讽了那些不太尽如人意的 shell。功能包括自动建议(“小心,Netscape Navigator 4.0”)、支持 VGA“惊人的”256 色调色板,但也有一些非常实用的功能,包括基于您机器上的 man 手册的命令完成、简洁的脚本编写和基于 Web 的配置。
Fish 主要在 GPL 版本 2 下获得许可,但部分代码在其他许可证下;有关完整信息,请查看存储库。
正在寻找关于每个选项之间精确差异的更详细介绍?这个网站应该能帮到您。
那么我最终选择了哪个?嗯,最终,我可能还是会回到 bash,因为这些差异非常细微,以至于主要以交互方式使用命令行而不是编写高级脚本的人真的不会从切换中获得太多好处,而且我已经非常习惯 bash 了。
但我很高兴我决定走出我的“shell”(哈!)并尝试一些新选项。而且我知道还有很多很多其他的 shell。您尝试过哪些 shell,您更喜欢哪一个?请在评论中告诉我们!
6 条评论