在MacOSX中使ZSH成为默认Shell

Har*_*M V 88 bash shell zsh

我在我的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
Run Code Online (Sandbox Code Playgroud)

dan*_*gom 173

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

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)
Run Code Online (Sandbox Code Playgroud)

显然,我认为这zsh是你的道路.例如,如果您选择安装最新版本zsh,此解决方案也可以使用brew install zsh.

编辑(感谢ThisIsFlorianK的评论):

根据您的shell设置,您可能会收到一条消息/etc/shells: Permission denied.您可以在此处找到有关此问题的信息. 要解决此问题,请使用以下代码:

$ sudo sh -c "echo $(which zsh) >> /etc/shells"
$ chsh -s $(which zsh)
Run Code Online (Sandbox Code Playgroud)

  • 如果你得到`/ etc/shells:Permission denied` ==>那就改为:`sudo sh -c"echo $(zsh)>>/etc/shells"` (42认同)
  • 在我看来,这比接受的答案更准确.假设zsh安装在/ usr/bin/zsh,其他答案不起作用.他们为OP工作,因为默认情况下,Apple在/ bin/zsh安装zsh.但是,如果你想使用自制软件的zsh(安装在/ usr/local/bin/zsh下),这将是正确的方法. (4认同)

Que*_*rez 76

3个简单步骤:

  1. which zsh这为您提供了zsh的路径
  2. 然后chsh -s /bin/zsh或者如果不同则替换zsh的路径
  3. 重启你的机器

  • 另一个相关的[评论](http://superuser.com/questions/362372/how-to-change-the-login-shell-on-mac-os-x-from-bash-to-zsh#comment680433_362374)将`/ usr/bin/zsh`添加到`/ etc/shells`的旧问题解决了这个问题. (8认同)
  • 不,我不认为,这只是为了你的信息:) (2认同)

Nat*_*son 44

通过执行以下操作,我能够实现此目的:

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

  • 如果你通过自制软件安装zsh,它会将zsh放在`/ usr/local/bin/zsh`中.因此,您需要在sudo下编辑`/ etc/shells`并为`/ usr/local/bin/zsh`添加一个条目,然后才能选择安装了hombrew的zsh可执行文件 (4认同)

sak*_*ias 7

在工作MacBook上,我必须这样做:

sudo chsh -s /usr/local/bin/zsh my_user_name
Run Code Online (Sandbox Code Playgroud)

然后,我必须创建一个.bash_profile文件,以便每次打开终端时都将其切换到z-shell:

touch ~/.bash_profile
echo 'export SHELL=$(which zsh)' >> ~/.bash_profile
echo 'exec $(which zsh) -l' >> ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

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