在 Mac 上将 zsh 用作默认 Shell

从 macOS Catalina 版开始,您的 Mac 将使用 zsh 作为默认登录 Shell 和交互式 Shell。您还可以在较低版本的 macOS 中将 zsh 设置为默认 Shell。

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

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

zsh 与 Bourne Shell (sh) 高度兼容,并且与 bash 基本兼容,但存在一些差别。要进一步了解 zsh 及其全面的命令行完成系统,请在“终端”中输入 man zsh

image

如何更改默认 Shell

无论您的用户帐户是配置为使用 zsh(推荐)、bash 还是其他 Shell,您都可以从“用户与群组”偏好设置或命令行中更改默认 Shell。

从“用户与群组”偏好设置中更改

  1. 选取苹果菜单  >“系统偏好设置”,然后点按“用户与群组”。

  2. 点按锁形图标
    image

    ,然后输入您的帐户名称和密码。

  3. 在左侧的用户列表中,按住 Control 键点按您的用户名,然后选取“高级选项”。

  4. 从“登录 Shell”菜单中选取一个 Shell,然后点按“好”以存储更改。

image

从命令行中更改

在“终端”中,输入 $ chsh -s <var style="font-family: &quot;SF Pro SC&quot;, &quot;SF Pro Text&quot;, &quot;SF Pro Icons&quot;, &quot;PingFang SC&quot;, &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; quotes: &quot;“&quot; &quot;”&quot;; font-style: normal; color: rgb(102, 102, 102);">path</var>,其中的 <var style="font-family: "SF Pro SC", "SF Pro Text", "SF Pro Icons", "PingFang SC", "Helvetica Neue", Helvetica, Arial, sans-serif; quotes: "“" "”"; font-style: normal; color: rgb(102, 102, 102);">path</var> 是 /etc/shells 中列出的某个 Shell 路径,例如 /bin/zsh、/bin/bash、/bin/csh、/bin/dash、/bin/ksh、/bin/sh 或 /bin/tcsh。

image

如何在不更改默认 Shell 的情况下使用其他 Shell

如果您不希望“终端”在新的“终端”窗口和标签页中使用默认的登录 Shell,请按照以下步骤操作:

  1. 打开“终端”,然后选取“终端”>“偏好设置”。
  2. 从“通用”面板中,选择“命令(完整的路径)”。
  3. 在提供的栏位中,输入 /etc/shells 中列出的某个 Shell 路径,例如 /bin/zsh、/bin/bash、/bin/csh、/bin/dash、/bin/ksh、/bin/sh 或 /bin/tcsh。
image

如果您调用 bash Shell,而 macOS Catalina 已配置为使用另一个 Shell,则您将看到一条信息,提示默认的交互式 Shell 现在是 zsh。要消除这个警告,您可以将以下命令添加到 ~/.bash_profile 或 ~/.profile 中:

<pre style="margin: 1em 0px 0px; padding: 8px; font-size: 16px; font-weight: 400; font-style: normal; font-family: "SF Pro SC", "SF Pro Text", "SF Pro Icons", "PingFang SC", "Helvetica Neue", Helvetica, Arial, sans-serif; quotes: "“" "”"; border: 1px solid rgb(222, 222, 222); color: rgb(102, 102, 102); background-color: rgb(250, 251, 252); display: block; overflow: auto;">export BASH_SILENCE_DEPRECATION_WARNING=1
</pre>

image

如何切换到 zsh 描述文件和提示符

如果您正在使用 bash 描述文件(例如,为了设置环境变量、别名或路径变量),则您应改为使用作用与它相同的 zsh 描述文件。例如:

  • .zprofile 的作用与 .bash_profile 相同,并且在登录时运行(包括通过 SSH 运行)
  • .zshrc 的作用与 .bashrc 相同,并针对每个新的“终端”会话运行

如果您正在使用 .profile(一个兼容 POSIX 的描述文件),则您可以将以下命令添加到 .zprofile,以便 zsh 自动读取这个描述文件的设置:

<pre style="margin: 1em 0px 0px; padding: 8px; font-size: 16px; font-weight: 400; font-style: normal; font-family: "SF Pro SC", "SF Pro Text", "SF Pro Icons", "PingFang SC", "Helvetica Neue", Helvetica, Arial, sans-serif; quotes: "“" "”"; border: 1px solid rgb(222, 222, 222); color: rgb(102, 102, 102); background-color: rgb(250, 251, 252); display: block; overflow: auto;">[[ -e ~/.profile ]] && emulate sh -c 'source ~/.profile'
</pre>

另外,您无需进行任何修改,就可以将 bash 描述文件中的某些设置转移到 zsh 描述文件。例如,要设置环境变量,您可以使用以下命令:export MY_SETTING=1

zsh 能够识别一组不同于 bash 所能识别的提示符指定符,并且用于指定彩色输出的语法更简洁,让您无需使用复杂的 ANSI 转义序列。例如,下面显示了 .bash_profile 中默认 bash 提示符的语法:

<pre style="margin: 1em 0px 0px; padding: 8px; font-size: 16px; font-weight: 400; font-style: normal; font-family: "SF Pro SC", "SF Pro Text", "SF Pro Icons", "PingFang SC", "Helvetica Neue", Helvetica, Arial, sans-serif; quotes: "“" "”"; border: 1px solid rgb(222, 222, 222); color: rgb(102, 102, 102); background-color: rgb(250, 251, 252); display: block; overflow: auto;">export PS1="[\e[92;40m]\h[\e[m]:[\e[93m]\W[\e[m] \$ "
</pre>

要在使用 .zprofile.zshrc 时将这个 prompt 提示符转换为 zsh 提示符,请使用以下命令:

<pre style="margin: 1em 0px 0px; padding: 8px; font-size: 16px; font-weight: 400; font-style: normal; font-family: "SF Pro SC", "SF Pro Text", "SF Pro Icons", "PingFang SC", "Helvetica Neue", Helvetica, Arial, sans-serif; quotes: "“" "”"; border: 1px solid rgb(222, 222, 222); color: rgb(102, 102, 102); background-color: rgb(250, 251, 252); display: block; overflow: auto;">export PS1="%10F%m%f:%11F%1~%f $ "
</pre>

请参阅 zsh man 页面,以了解更多详细信息。

image

如何测试 Shell 脚本

要在 macOS Catalina 中使用与 Bourne 兼容的 Shell 来测试脚本兼容性,您可以将 /var/select/sh 更改为 /bin/bash、/bin/dash 或 /bin/zsh。如果您将 /var/select/sh 更改为 bash 之外的 Shell,请注意,使用 bashisms 的脚本可能无法正常工作。

您可以运行命令 zsh --emulate sh 来让 zsh 模拟 sh。

参考官方文档

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352

推荐阅读更多精彩内容