如何让oh my zsh使用最新的zsh版本?

如何让oh my zsh使用最新的zsh版本?,zsh,oh-my-zsh,Zsh,Oh My Zsh,我在iTerm(osx)中使用zsh和oh-my-zsh。我遇到以下问题: echo$ZSH_版本返回4.3.11 我成功运行了upgrade\u oh\u my\u zsh echo$ZSH_版本再次返回4.3.11 我运行brew安装zsh/brew升级zsh,得到一个错误:zsh-5.0.2已安装 然而,即使我重新启动iTermecho$ZSH_版本后,仍然返回4.3.11 如何让OMZ使用最新的zsh版本?解决了这个问题。我的/etc/path的顶部已经有/usr/local/bin。当

我在iTerm(osx)中使用zsh和oh-my-zsh。我遇到以下问题:

  • echo$ZSH_版本
    返回4.3.11
  • 我成功运行了
    upgrade\u oh\u my\u zsh
  • echo$ZSH_版本
    再次返回4.3.11
  • 我运行
    brew安装zsh
    /
    brew升级zsh
    ,得到一个
    错误:zsh-5.0.2已安装
  • 然而,即使我重新启动iTerm
    echo$ZSH_版本
    后,仍然返回4.3.11

  • 如何让OMZ使用最新的zsh版本?

    解决了这个问题。我的
    /etc/path
    的顶部已经有
    /usr/local/bin
    。当我打开
    /usr/local/bin/
    时,我看到除了
    zsh
    ,我还有
    zsh-5.2.0
    。我尝试了
    chsh-s/usr/local/bin/zsh-5.2.0
    ,但没有效果。我删除了
    zsh
    ,并将
    zsh-5.2.0
    重命名为
    zsh
    ->也没有用。我看到
    zsh-5.2.0
    指向
    /usr/local/cillar/zsh/5.0.2/bin/zsh-5.0.2
    ,之前我看到原始
    zsh
    指向
    /bin/zsh
    。所以帮助我的是:

    • 打开的
      /usr/local/ceral/zsh/5.0.2/bin/
      ->包含
      zsh
      zsh-5.2.0
    • zsh
      从那里复制到
      /bin/
      并重写
      /bin/zsh
    • 重新启动的iTerm

      • 我很高兴你找到了解决办法。一些注意事项:

      • oh my zsh
        是一个zsh配置框架。它不是“zsh”,只是shell的配置文件。升级
        oh my zsh
        zsh
        本身是两个独立的、基本不相关的任务
      • 用新二进制文件覆盖
        /bin/zsh
        是一种解决方案。另一种方法是使用一个-可能是从
        /usr/local/cillar/zsh/5.0.2/bin/zsh-5.2.0
        $PATH
        中的某个地方(如
        /usr/local/bin/
        ),并使用
        chsh
        设置shell。符号链接的优点是保留了所有二进制文件(因此仍然有
        4.3
        5.0
        5.2
      • 也许可以解释一下为什么
        chsh
        不起作用
        我的~/.zshrc中有以下内容。它将在给定的目录列表中找到一个可用的zsh,按版本号对它们进行排序,并执行最新的一个

        if [[ $- == *i* ]]; then
            arg=$(
                for dir in \
                    /usr/local/bin \
                    /usr/gnu/bin \
                    /usr/sfw/bin \
                    /bin \
                    /usr/bin
                do
                    arg=$dir/zsh
        
                    # Make sure the shell is a readable, executable file.
                    if [[ ! -f $arg || ! -r $arg || ! -x $arg ]]; then
                        continue
                    fi
        
                    # Print sortable version number and path to shell.
                    ver=$( $arg -c 'echo $ZSH_VERSION' 2>/dev/null )
                    if [[ -n $ver ]]; then
                        printf '%03u%03u%03u %s\n' $( echo $ver | tr '.' ' ' ) $arg
                    fi
                done | sort -r | head -1 | cut -c11-
            )
        
            if [[ -n $arg && $arg != $SHELL ]]; then
                echo "Switching SHELL to $arg"
                export SHELL=$arg
                exec $SHELL -li
            fi
        fi
        
        如果希望它搜索PATH变量的内容,可以使用

        for dir in $( echo "$PATH" | tr ':' ' ' ); do
            (...)
        
        如果目录名中有空格,则必须使用

        printf '%s\n' "$PATH" | tr ':' '\n' | while read dir; do
            (...)
        
        并在$arg和$SHELL周围添加双引号