在 macOS 上活用 Bash:如何从 Zsh 切换?
在之前的文章中,我们学习了从 Bash 的基础知识到在 Windows 上通过 WSL 使用 Bash 的方法。这次,我们将为 macOS 用户深入探讨,分享一些能让您的终端环境更加舒适的知识。如果您是一位钟爱 macOS 的 Web 创作者,可能曾有过这样的经历:打开终端时,看到了陌生的“zsh”字样,心中不禁疑惑:“咦,这不是 Bash 吗?”
没错,自 macOS Catalina(2019年发布)起,Mac 的默认 Shell 已从 Bash 更改为 Zsh (Z Shell)。Zsh 是一个功能非常强大且优秀的 Shell,但市面上的许多教程和服务器仍以 Bash 为标准。因此,有不少人希望能“为了学习而搭建 Bash 环境”或“希望使用与服务器完全相同的 Shell 进行工作”。
本文将为这些 macOS 用户,通俗易懂地解说以下几点:
- Zsh 与 Bash 的基本区别是什么?
- 如何在 macOS 上安全地安装最新版的 Bash?
- 如何随时根据需要,将默认 Shell 从 Zsh 切换到 Bash(或反之)?
读完本文后,您应该就掌握了自由定制 macOS 终端环境,并根据项目需求选择最合适 Shell 的知识!
Zsh 与 Bash,有何不同?
首先,Zsh 和 Bash 都是“Shell”的一种,是我们向操作系统传达命令的交互式程序,这一点是共通的。许多基本命令(如 ls, cd, mkdir 等)在两种 Shell 中的用法完全相同。
那么,为什么苹果公司要从多年来一直是标准的 Bash 切换到 Zsh 呢?让我们来看看主要区别和原因。
- Bash (Bourne-Again SHell): 多年来作为 Linux 和 macOS 的标准,堪称“Shell 中的王者”。其特点是稳定性和兼容性好,相关信息资源也极其丰富。
- Zsh (Z Shell): 作为 Bash 的扩展而开发,是一个更现代、功能更强大的 Shell。其魅力在于强大的补全功能(命令提示)、拼写纠正、以及通过丰富主题实现的自定义性等。
- 切换背景: 苹果切换到 Zsh 的一个重要原因是许可证问题。Bash 的新版本(v4.0 及以后)采用 GPLv3 许可证,苹果希望避免该许可证的某些条款,因此 macOS 中搭载的 Bash 一直停留在非常古老的 3.2 版本。而 Zsh 采用的是更为自由的许可证,使得苹果可以搭载其最新版本。
总而言之,Zsh 在功能上接近 Bash 的上位替代,但兼容性并非 100%。为了与服务器环境或现有脚本保持一致而希望使用 Bash 的需求,至今仍然非常普遍。
步骤 1: 安装最新版的 Bash
如前所述,macOS 自带的 Bash 版本非常老旧。首先,我们使用 Homebrew 来安装最新版的 Bash。Homebrew 是 macOS 上一个方便的包管理工具。
打开终端,执行以下命令来安装 Bash。(如果尚未安装 Homebrew,请先完成安装)。
brew install bash
这样,除了 macOS 标准的 /bin/bash 之外,一个由 Homebrew 管理的新的 Bash 就被安装好了。(通常位于 /usr/local/bin/bash 或 /opt/homebrew/bin/bash)。
版本确认
安装后,我们来比较一下新旧 Bash 的版本。首先,确认 macOS 自带的旧版 Bash 的版本。
$ /bin/bash --version
GNU bash, version 3.2.57(1)-release ...
接下来,确认通过 Homebrew 安装的新版 Bash 的版本。(请根据您的环境调整路径)。
$ /opt/homebrew/bin/bash --version
GNU bash, version 5.2.15(1)-release ...
可以看到,版本号为 5 系列的新版 Bash 已经安装成功了!
步骤 2: 将默认 Shell 切换为 Bash
仅仅安装了新的 Bash 还不够,此时新打开的终端使用的仍然是 Zsh。接下来,我们来看看如何将其更改为我们刚刚安装的新版 Bash。
2-1. 将新版 Bash 添加到允许的 Shell 列表中
出于安全考虑,macOS 将用户可以设置为默认 Shell 的程序路径记录在一个名为 /etc/shells 的文件中。首先,我们需要将通过 Homebrew 安装的 Bash 的路径追加到这个文件中。
请执行以下命令。如果提示输入密码,请输入您 Mac 的登录密码。
sudo sh -c 'echo /opt/homebrew/bin/bash >> /etc/shells'
2-2. 使用 chsh 命令更改默认 Shell
添加到允许列表后,我们使用 chsh (change shell) 命令,将您的登录 Shell 更改为新版 Bash。
chsh -s /opt/homebrew/bin/bash
执行此命令后,请完全退出并重新打开终端。这样,下次启动终端时就会默认使用 Bash 了。
步骤 3: 验证与恢复方法
打开一个新的终端窗口后,让我们来确认一下 Shell 是否真的切换到了 Bash。执行以下命令。
$ echo $SHELL
/opt/homebrew/bin/bash
如果显示的是通过 Homebrew 安装的 Bash 的路径,那么切换就成功了!
想换回 Zsh 的时候
如果您开始怀念 Zsh 的功能,或者想换回去,也非常简单。同样使用 chsh 命令,只需指定 Zsh 的路径即可。
chsh -s /bin/zsh
之后,重新打开终端,您就会回到熟悉的 Zsh 提示符界面了。
总结
辛苦了!这次我们为 macOS 用户解说了如何将默认 Shell 从 Zsh 切换到最新版的 Bash。这样一来,您的 Mac 就拥有了与 Web 开发一线广泛使用的 Bash 环境几乎一致的配置,学习和工作都会变得更加顺畅。
Zsh 和 Bash 都是各有所长的优秀工具,没有哪一个绝对优于另一个。重要的是理解它们各自的特点,并具备根据项目需求或个人喜好随时切换环境的知识。通过今天的文章,您已经掌握了这种能力!
好了,既然 Bash 环境已经就绪,下一步就是逐一深入学习 Bash 的基本命令了。在下一篇文章中,我们将详细解说文件操作的基础,如 `cd` 和 `ls` 等。这是使用 Bash 的基本功,请务必继续关注。