在MacOSX中将ZSH设为默认Shell [关闭]


98

我在Mac上安装了zsh。现在我想使其成为默认的外壳而不是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,2015年

1
chsh:选项需要一个参数-l用法:chpass [-l位置] [-u身份名] [-s外壳] [用户]
Harsha MV

/ bin / bash / bin / csh / bin / ksh / bin / sh / bin / tcsh / bin / zsh
Harsha MV,

这有什么错/bin/zsh
jxh

1
现在有一种官方方法可以将默认Shell更改为zsh。请参阅Apple文档“在Mac上使用zsh作为默认外壳” support.apple.com/zh-cn/HT208050
Anthonyeef

Answers:


85

3个简单步骤:

  1. which zsh这给你通往zsh的道路
  2. 然后,chsh -s /bin/zsh或者如果不同则替换到您的zsh的路径
  3. 重新启动机器

是的,有效。是优胜美地特有的吗?
Harsha MV

2
不,我不认为,这只是供您参考:)
Quentin Perez

8
对相同的较旧问题的另一条相关评论说要添加/usr/bin/zsh/etc/shells解决该问题。
布莱斯

它运行完美
Olkunmustafa

1
相应地将其设置为/ etc / shells!用'$ nano / etc / shells'查找zsh路径。我的是在10.12.2上的/ bin / zsh而不是/ usr / bin / zsh
oikonomopo

187

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

chsh:/ usr / bin / zsh:非标准外壳

出现这种情况的原因是,因为chsh它将仅接受文件/ etc / shells中定义的shell,如阅读以下手册可以看到的那样chsh

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

为了解决此问题并使zsh成为默认外壳,您应该:

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

显然,我认为这zsh就是您的做法。例如,如果您选择使用安装最新版本zsh,则此解决方案也将起作用brew install zsh

编辑(感谢ThisIsFlorianK的评论)

根据你的shell设置,您可能会收到一条消息说/etc/shells: Permission denied。您可以在此处找到有关此问题的信息。 要变通解决此问题,请改用以下内容:

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

4
我认为这比公认的答案更准确。假设zsh安装在/ usr / bin / zsh中,则其他答案不起作用。他们为OP工作,因为默认情况下,Apple在/ bin / zsh上安装zsh。但是,如果你想使用自制的zsh的(这是在/ usr / local / bin目录/ zsh的安装),这将是正确的方式做到这一点
verboze

我有“ bash:/ etc / shells:权限被拒绝”。通过系统偏好设置的答案对我有用。
里卡多·斯图文

44
如果得到/etc/shells: Permission denied==>,请改为: sudo sh -c "echo $(which zsh) >> /etc/shells"
ThisIsFlorianK

1
stackoverflow.com/a/44547726/99834-运行时不会弄乱系统文件。唯一缺少的是执行相同操作的CLI版本。
索林

@sorin这是无用的故意破坏行为,还是答案实际上有什么不对?由于某种原因,系统文件是可编辑的文本文件。chsh由于某种原因默认情况下可用。尽管点击菜单中的菜单来完成相同的操作并没有天生的错误,但这不仅不方便携带而且容易出错,而且还会误导用户,使用户看不到更改的来源。
dangom

52

通过执行以下操作,我可以使此工作正常进行:

  1. 转到系统偏好设置
  2. 点击“用户和组”
  3. 单击锁进行更改。
  4. 右键单击当前用户->高级选项
  5. 在下拉菜单中将登录shell更改为/ bin / zsh。
  6. 打开一个新的终端并使用 echo $SHELL

4
如果您通过自制软件安装zsh,它将把zsh放在中/usr/local/bin/zsh。因此,您需要/etc/shells在sudo下编辑并添加的条目,/usr/local/bin/zsh然后才能选择hombrew安装的zsh可执行文件
Baldy

7

在工作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

最后的想法是从这里借来的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.