Zsh Merch Designs by Zsh(CC BY-SA 4.0)
2019 年,在 macOS 10.15 Catalina 版本中苹果宣布 使用 Zsh 作为默认的 shell。
zsh
(我相信它的发音是zee-shell,尽管zish说起来很有趣)即将成功取代 bash
作为默认的 shell。bash
自 Mac OS X 10.3 Panther 以来一直是默认 shell。
为什么?
macOS 默认的 shell —— bash
已经停留在 3.2 版本很长时间了,但最新的 bash
v5 在 2019 年 1 月就已经发布了。
这是因为 bash
v3 使用的是 GPL v2 证书, 苹果没有切换到这些较新版本的原因是版本大于 3 的 bash 使用的是 GPL v3 证书。而 v3 对比 v2 实在是过于严格了。
而另一方面,zsh
拥有 MIT 的许可证,这使得苹果更愿意将其默认包含在系统中。zsh
已经在 macOS 上可用了很长时间。macOS 10.14 Mojave 上的 zsh
版本相当新 (5.3)。macOS 10.15 Catalina 的 zsh 版本为 5.7.1
。
bash 不见了!?
并不是这样,实际上 macOS 提供很多个 shell,查看 Mac 自带的 shell 的命令为 cat /etc/shells
,结果如下:
macOS Catalina 的 bash
仍然和更早的 macOS 版本相同(版本 3.2.57),所以即使当您升级到 Catalina 时,用户的 bash shell 将保持原样。
有时候当你打开终端可能就会收到如下提示:
$ /bin/bash
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
想要禁用此提示,可以在 $HOME/.bash_profile
、$HOME/.profile
、$HOME/.bashrc
添加如下内容重启终端。
export BASH_SILENCE_DEPRECATION_WARNING=1
您也可以自己下载并安装更新版本的 bash。请记住,自定义 bash 安装位于不同的目录中,通常是/usr/local/bin/bash
。
bash 会无限期保留吗?
历史上苹果也换过 shell,比如 2005 的 Mac OS X 10.3 Panther 版本把默认 shell 由 tcsh
切换为 bash
,苹果并不真正关心您是否继续使用 tcsh
。
虽然如此,但是 tcsh
在 macOS 上仍然存在。
macOS Catalina 上还出现了一个新的 shell。'Debian Almquist Shell' dash
已被添加到 shell 阵容中。 dash
被设计为 Posix 标准 shell sh
的最小实现。到目前为止,在 macOS(包括 Catalina)中, sh
在 sh
兼容模式下调用 bash
。
所有这些变化都是苹果准备在未来某个但不确定的时间删除 /bin/bash
。
我需要等待 Catalina 切换到 zsh 吗
不需要,本质上 zsh
就是个软件,只要电脑上有没有自己装个就可以开始测试 zsh
甚至切换默认 shell。
如果你只想看看它是如何 zsh
工作的,你可以打开终端并输入 zsh
:
$ zsh
MacBook%
您将看到的主要变化是提示看起来有所不同。zsh
使用该%
字符作为默认提示。(当然,您可以更改它。)大多数导航击键和其他行为将与bash
。
如果您已经想将默认 shell 切换为zsh
可以使用以下chsh
命令:
$ chsh -s /bin/zsh
这将提示您输入密码。此命令不会更改当前的 shell,而是所有新的 shell,因此请关闭当前的终端窗口和选项卡并打开一个新的。
zsh 有何不同?
与 bash
('Bourne again shell')一样, zsh
源自 'Bourne' 家族的 shell。由于这种共同的祖先,它在日常使用中表现非常相似。最明显的变化将是不同的提示。
bash
和 zsh
之间的主要区别在于配置。由于 zsh
忽略了 bash
配置文件( .bash_profile
或 .bashrc
),因此您不能简单地将自定义的 bash 设置复制到 zsh
。 zsh
有更多选项和点来更改 zsh
配置和行为。有一个完整的配置工具和主题生态系统,称为 oh-my-zsh
,非常受欢迎。
zsh
还为自动完成提供了更好的配置,这比 bash
中容易得多。
脚本呢?
由于 zsh
在 macOS 上已经存在了很长时间,因此您可以立即开始将脚本从 bash
移动到 zsh
,而不会失去向后兼容性。只需记住将脚本中的 shebang 设置为 #!/bin/zsh
,为了更好的兼容性,使用 /bin/sh
作为 shebang。也是一个不错的选择。
您将获得 zsh
中 bash
v3 不存在的一些功能,例如数组和关联数组(字典)。
概括
总的来说,虽然来自苹果的信息非常有趣,但变化本身不如头条新闻那么引人注目。苹果并没有使用 zsh
取代 bash
,至少现在还没有。总的来说,我们将不得不重新思考和重新学习一些东西,但最终从一个十年前的 shell 切换到一个新的现代 shell 也有很多收获!