SHELL 十二月 13, 2020

zsh

文章字数 5k 阅读约需 5 mins. 阅读次数

macOS Catalina 飞起来了 之后,发现打开终端时会提示 The default interactive shell is now zsh.
从 macOS Catalina 版开始,Mac 将使用 zsh 作为默认登录 Shell 和交互式 Shell。

默认情况下,Mac 使用 zsh 或 bash 作为登录 Shell 和交互式 Shell 的命令行解释器:

  • 从 macOS Catalina 版开始,zsh (Z shell) 是所有新建用户帐户的默认 Shell。
  • bash 是 macOS Mojave 及更低版本中的默认 Shell。

那么,zsh 是什么?

zsh - the Z shell,初版由 Paul Falstad 于 1990 年 12 月普林斯顿大学 求学时发布,据说 之所以使用这个名字,是因为当时在普林斯顿做助教的邵中(Zhong Shao,现任耶鲁大学教授)的登录名是 zsh,Paul 认为这是一个用于 shell 的好名字。

所以 zsh 是 shell 的一种,被设计用来与操作系统进行交互,同时也是一个强大的脚本语言。

目前 zsh 由 <zsh-workers@zsh.org> 邮件列表中的成员所维护,当前的开发工作主要由 Peter Stephenson <pws@zsh.org> 进行协调,目前最新的发布版是 2020 年 2 月 15 日发布的 5.8 版

还有哪些 shell?

引用阮一峰老师 Bash 脚本教程 中对 Shell 和 Bash 的历史 的介绍:

Shell 伴随着 Unix 系统的诞生而诞生。

1969年,Ken Thompson 和 Dennis Ritchie 开发了第一版的 Unix。

1971年,Ken Thompson 编写了最初的 Shell,称为 Thompson shell,程序名是sh,方便用户使用 Unix。

1973年至1975年间,John R. Mashey 扩展了最初的 Thompson shell,添加了编程功能,使得 Shell 成为一种编程语言。这个版本的 Shell 称为 Mashey shell。

1976年,Stephen Bourne 结合 Mashey shell 的功能,重写一个新的 Shell,称为 Bourne shell。

1978年,加州大学伯克利分校的 Bill Joy 开发了 C shell,为 Shell 提供 C 语言的语法,程序名是csh。它是第一个真正替代sh的 UNIX shell,被合并到 Berkeley UNIX 的 2BSD 版本中。

1979年,UNIX 第七版发布,内置了 Bourne Shell,导致它成为 Unix 的默认 Shell。注意,Thompson shell、Mashey shell 和 Bourne shell 都是贝尔实验室的产品,程序名都是sh。对于用户来说,它们是同一个东西,只是底层代码不同而已。

1983年,David Korn 开发了Korn shell,程序名是ksh。

1985年,Richard Stallman 成立了自由软件基金会(FSF),由于 Shell 的版权属于贝尔公司,所以他决定写一个自由版权的、使用 GNU 许可证的 Shell 程序,避免 Unix 的版权争议。

1988年,自由软件基金会的第一个付薪程序员 Brian Fox 写了一个 Shell,功能基本上是 Bourne shell 的克隆,叫做 Bourne-Again SHell,简称 Bash,程序名为bash,任何人都可以免费使用。后来,它逐渐成为 Linux 系统的标准 Shell。

zsh 与 Bourne Shell (sh) 高度兼容,并且与 Bash 基本兼容,但存在一些差别。

关于 zsh 与 Bash 的差别,可参考 zsh 的内建指令Bash 的内建指令,以及 zsh 与其他 shell 的比较

另可参考 Bash 的介绍 等内容。

想知道你的系统里有几种 shell,可以通过以下命令查看:

$ cat /etc/shells
/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

临时使用其他 shell,可以直接输入 shell 名,比如 tcsh

修改默认 shell,可以使用 chsh -s /bin/zsh

为什么要用 zsh?

简单总结几个吸引我的点:

  1. 强大的 Tab 补全功能
  2. 活跃的社区、丰富的插件,比如下面要提到的跳转路径插件 autojump
  3. 苹果强推

zsh 也是一把双刃剑,在享受便利的同时,也会有一些不便:

  1. 与 Bash 并非完全兼容,所以进行脚本开发时需时刻注意
  2. 配置繁琐

Oh My Zsh

提到 zsh,就不得不提 Oh My Zsh,依靠强大的社区(with 1700+ contributors),可以抹平 zsh 的上手门槛,开箱即用,入门之后还有广阔的折腾空间。

比如 为什么说 zsh 是 shell 中的极品? 这里提到的各种功能,大多是通过 zsh 的插件实现的,zsh 及 Oh My Zsh 的默认配置中并不包含。

autojump

墙裂推荐的一个插件就是 autojump,在命令行里切换路径是一个很低效的事,安装并配置此插件后,即可直接 j 到包含后面录入的关键字的目录,或使用 Tab 列出所有包含关键字的目录,再按 Tab 进行选择,如:

autojump

0%