如何在MacOSX中将ZSH设置为默认Shell

122

我在我的Mac上安装了zsh,现在想将它设置为默认的shell而不是Bash。但我似乎遇到了以下错误:

$ echo $SHELL
/bin/bash
$ chsh -s /usr/bin/zsh
Changing shell for harshamv.
Password for harshamv:
chsh: /usr/bin/zsh: non-standard shell

1
chsh -l 输出什么?(如果不行,那 /etc/shells 的内容是什么?)你确定这是失败了而不只是警告吗?在那里添加 /usr/bin/zsh 能让它工作吗? - Etan Reisner
1
chsh: 选项需要一个参数 -- l 用法: chpass [-l location] [-u authname] [-s shell] [user] - Harsha M V
/bin/bash /bin/csh /bin/ksh /bin/sh /bin/tcsh /bin/zsh - Harsha M V
/bin/zsh出了什么问题? - jxh
1
现在有官方方法可以将默认 shell 更改为 zsh。请参阅苹果文档“在 Mac 上使用 zsh 作为默认 shell”https://support.apple.com/en-ca/HT208050。 - Anthonyeef
1
iTerm2 --> 偏好设置 --> 个人资料 --> 命令 --> 自定义 Shell --> /usr/local/bin/zsh - Sachin Raut
4个回答

226

正确答案应该解决了您的问题:

chsh:/usr/bin/zsh:非标准shell

这是因为chsh只接受在文件/etc/shells中定义的shell,可以通过阅读chsh手册来了解:

chsh将接受系统上任何可执行文件的完整路径名。但是,如果Shell未列在/etc/shells文件中,它将发出警告。

要解决此问题并将zsh设置为默认Shell,您应该执行以下操作:

$ sudo echo "$(which zsh)" >> /etc/shells
$ chsh -s $(which zsh)

显然,我假设您的路径中包含 zsh 。如果您选择使用 brew install zsh 安装最新的 zsh ,这个解决方案也将适用。

编辑(感谢ThisIsFlorianK的评论):

根据您的shell设置,您可能会收到一个消息,显示 /etc/shells:权限被拒绝。 您可以在这里找到有关此问题的信息。 为了解决此问题,请改用以下命令:

$ sudo sh -c "echo $(which zsh) >> /etc/shells"
$ chsh -s $(which zsh)

5
在我看来,这个回答比被接受的答案更准确。假设zsh已经安装在/usr/bin/zsh,其他答案不能正常工作。它们对于提问者有效,因为默认情况下,苹果将zsh安装在/bin/zsh下。然而,如果您想使用Homebrew的zsh(它安装在/usr/local/bin/zsh下),这是正确的方法。 - verboze
我遇到了“bash:/etc/shells:权限被拒绝”的问题。通过系统偏好设置的方法解决了我的问题。 - Ricardo Stuven
46
如果你遇到了 /etc/shells: Permission denied 的问题 ==> 那么请执行以下操作:sudo sh -c "echo $(which zsh) >> /etc/shells" - ThisIsFlorianK
1
这是一个与系统文件无关的工作方法。唯一缺少的是执行相同操作的CLI版本。 - sorin
@sorin 这个踩票是无端的破坏还是回答有什么实际问题?系统文件是可编辑的文本文件,这是有原因的。chsh 是默认可用的,也是有原因的。虽然通过大量菜单点击来完成相同的事情本质上没有错,但这不仅不可移植且容易出错,而且会误导用户,隐藏了更改的来源。 - Daniel
显示剩余3条评论

97

三个简单步骤:

  1. which zsh 这将为您提供zsh的路径。
  2. 然后运行 chsh -s /bin/zsh,如果不同,请替换为您的zsh路径。
  3. 重新启动计算机。

2
不,我不认为是这样的,那只是提供给你的信息而已 :) - Quentin Perez
9
同一旧问题的另一个相关评论指出,将/usr/bin/zsh添加到/etc/shells中可以解决该问题。 - bric3
它运行完美。 - Olkunmustafa
1
将其设置为 /etc/shells 相应的路径!使用 '$ nano /etc/shells' 查找 zsh 路径。我的路径是在 10.12.2 上的 /bin/zsh,而不是 /usr/bin/zsh。 - oikonomopo
我之前没有意识到 Mac 已经安装了 zsh。另一种更简单的改变 shell 的方法是使用流行的 oh-my-zsh 框架,只需在他们网站 http://ohmyz.sh/ 上列出的 curl 或 wget 命令中输入以下命令即可将 shell 更改为 zsh: sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" - What Would Be Cool
显示剩余5条评论

58

我按照以下步骤让它成功运行:

  1. 进入系统偏好设置
  2. 点击“用户与群组”
  3. 点击锁以进行更改
  4. 右键单击当前用户 -> 高级选项
  5. 在下拉菜单中更改登录Shell为/bin/zsh
  6. 打开一个新终端并通过echo $SHELL进行验证

4
如果你通过Homebrew安装zsh,它会将zsh放置在/usr/local/bin/zsh中。 因此,在选择Homebrew安装的zsh可执行文件之前,您需要在sudo下编辑/etc/shells并添加一个/usr/local/bin/zsh的条目。 - Baldy

9
在我工作的MacBook上,我必须这样做:
sudo chsh -s /usr/local/bin/zsh my_user_name

接下来我需要创建一个.bash_profile文件,以便每次打开终端时都能切换到z-shell:

touch ~/.bash_profile
echo 'export SHELL=$(which zsh)' >> ~/.bash_profile
echo 'exec $(which zsh) -l' >> ~/.bash_profile

最后一个想法是从这里借鉴的。


请注意,与期望的行为“仅启动zsh”不同,这个命令会先启动bash,然后再从bash中启动zsh(这是一种反模式,有时被称为“嵌套shell调用”)。 - Austin York

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接