什么是安装/升级/设置 ZSH 默认版本的确定性方法?

27

OSX Mountain Lion自带ZSH 4.3.1,位于/bin/zsh。在下载了版本5.0.0并执行了./configure, make, make check,make install之后,which zsh仍返回/bin/zsh/zsh --version仍返回zsh 4.3.11 (i386-apple-darwin12.0)

需要注意的是:
在安装命令运行时未发生错误。
在/usr/local/bin中,存在这三个文件:
-rwxr-xr-x 2 kevinsuttle admin 622K Aug 20 00:59 zsh
-rwxr-xr-x 2 kevinsuttle admin 622K Aug 20 00:59 zsh-5.0.0
-rwxr-xr-x 1 kevinsuttle admin 622K Aug 20 00:50 zsh.old
我的$PATH为:
$ echo $PATH
/Users/kevinsuttle/.rbenv/shims:/Users/kevinsuttle/.rbenv/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin

我需要得到以下问题的答案:
1. 安装ZSH最干净的方法是什么?(从git、homebrew,从源代码中curl?)
2. 运行安装命令的位置是否重要?
3. 如何升级或覆盖Mountain Lion自带的ZSH版本?
4. 这是人们最终使用 oh-my-zsh 的原因吗?


2
我不确定这会对事情产生什么影响,但你可以将本地 shell 指向你想要的版本。在你自己的 ~/bin 中创建一个符号链接,并在你的 PATH 中尽早添加它。 - Burhan Khalid
这让我间接地找到了解决方案。我只需要将我想要的目录添加到我的$PATH中即可。谢谢! - Kevin Suttle
4个回答

49

在 OSX 中,您需要使用以下命令设置默认 shell:

chsh -s /usr/local/bin/zsh $USER

重新登录到OSX,然后它应该可以正常工作!

使用Homebrew方式

我建议您使用Homebrew。这将使事情更加容易。 安装Homebrew,就像在链接上描述的那样。

Homebrew会将你的东西安装在/usr/local/bin中,因此请确保/usr/local/bin位于/usr/bin之前。

在~/.zshrc和~/.bashrc中添加以下行:

PATH="/usr/local/bin:/usr/local/sbin:$PATH"

安装zsh:

brew install zsh

将您的默认Shell设置为zsh:

chsh -s /usr/local/bin/zsh $USER

最后给brew安装的zsh设置权限。将“/usr/local/bin/zsh”添加到“/etc/shells”文件中以允许使用zsh。否则,您将会收到错误提示:“You are not authorized to run this application. The administrator has set your shell to an illegal value.”(您未被授权运行此应用程序。管理员已将您的shell设为非法值。)

echo "/usr/local/bin/zsh" | sudo tee -a /etc/shells

我建议解决OSX中zsh环境的错误。将/etc/zshenv重命名为/etc/zshrc。

sudo mv /etc/{zshenv,zshrc}

重新登录到OSX,然后它应该可以工作!

如果你有问题,请输入:

brew doctor

4
在Mac电脑上更改用户默认shell的“官方”方式是在系统偏好设置中的帐户面板中右键单击您的用户名(解锁“进行更改”后),并在高级选项下更改默认shell。我不确定这是否与使用chsh完全相同。 - John McDonnell
我认为没有必要干扰$PATH的顺序,因为你使用chsh -s来使用位于/usr/local/bin/zsh的shell。$PATH将决定在调用它运行脚本或运行zsh或其他内容时运行哪个版本的zsh。另外请注意,OS X的zsh位于/bin/而不是/usr/bin/ - Steven Lu
10
实际上,在更改shell之前,您需要将“/usr/local/bin/zsh”添加到“/etc/shells”中,以便可以通过“chsh”进行选择。 - Tyler Brock
好的回答。请注意错别字:chsh -s /user/local/bin/zsh $USER 应该是 usr 而不是 user - Prem
在MacBook Pro Catalina操作系统上,只需运行brew install zsh即可。之后我运行了which zsh,它返回了/usr/local/bin/zsh - Promise Preston

3

好的,Burhan的评论让我想起了一个情况,在那种情况下,我不得不明确地将首选版本的路径添加到我的.bash_profile中。版本5.0.0在/usr/local/bin中,因此现在我的.bash_profile中的$PATH如下:

export PATH="$HOME/.rbenv/bin:/usr/local/bin:$PATH"

现在当我运行which zsh时,我会得到/usr/local/bin/zsh
zsh --version返回zsh 5.0.0 (x86_64-apple-darwin12.0.0)

哇!希望这能帮助有同样问题的人。


2

我会尝试回答你的问题,但我感觉这更适合超级用户

安装ZSH最干净的方法是什么?(从git、homebrew、curl源码中获取?)

无论你以任何方式获取源代码,最干净的方法是创建一个私有bin,我喜欢/Users/burhan/bin/,然后在那里安装东西。在我看来,这是最干净简单的方法,因为你不需要依赖其他库/安装程序/魔法。

运行安装命令的位置是否重要?

不,重要的是你给命令提供的参数,特别是目标安装位置和库路径。如果你没有提供这些参数(或者在之前设置它们的环境变量),安装程序将把项目放在默认的系统路径中;为了做到这一点,你需要以管理员权限运行安装程序,即使用sudo或作为root登录。

如何升级或覆盖Mountain Lion附带的ZSH版本?

我建议不要升级它;仅仅是因为我不确定它对那些期望使用广告版本的各种其他脚本会产生什么副作用。为了你的健康着想,我建议避免这样做。

相反,如果你构建并安装到私有bin中,并适当地设置PATH,你可以在不修改附带版本的情况下使用更新的版本。


嗯,现在我必须编辑/etc/shells以使chsh识别新位置,这很好,但我在Lion上不必这样做。另外,一旦我将默认shell更改为zsh,窗口标题中的活动进程仍然显示bash。这很奇怪。我运行了chsh -s /usr/local/bin/zsh kevinsuttle来更改默认设置。$ echo $0返回-bash$ echo $SHELL返回/usr/local/bin/zsh - Kevin Suttle
要解决这个问题,编辑“终端 > 首选项”,然后设置默认的启动 shell;然后在“设置”中,选择您的主题并单击“Windows”选项卡;您可以修改显示的标题。我非常喜欢使用 iTerm2,因为它更加可定制化。 - Burhan Khalid
谢谢 Burhan。解决了。不过 chsh 的行为仍然有点奇怪。以前我从没遇到过这种情况,可能这就是很多人放弃使用 chsh 进行配置而改用 oh-my-zsh 的原因吧。 - Kevin Suttle
我认为这可能是一个特定于“终端”(Terminal)的问题,Kevin。因为这个和其他的“怪癖”,我已经停止使用它了。如果你要花费大量时间在shell中,可以考虑使用iTerm2Terminator - Burhan Khalid

0
过去,我为这种升级问题想出的解决方案大致如下:
  • 在某个地方安装新版本(在我的情况下是fink /sw/bin的默认位置)
  • 将/bin/zsh中的OS安装版本重命名为/bin/zsh.moved
  • 在/bin中设置一个符号链接到/sw/bin/zsh安装

这似乎有效。


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