【问题标题】:Java_HOME not found when changed shell from Bash to Zsh on OSX?在 OSX 上将 shell 从 Bash 更改为 Zsh 时找不到 Java_HOME?
【发布时间】:2015-08-12 19:36:22
【问题描述】:

这很奇怪,我为我的 mac 设置了 JAVA_HOME,当我使用 bash shell 时可以找到它,但是如果我更改 shell,我会收到一条消息说 JAVA_HOME 未设置。这里会发生什么?

【问题讨论】:

    标签: macos bash zsh


    【解决方案1】:

    在从 bash 迁移到 oh-my-zsh 时尝试解决相同的问题时,我偶然发现了您的问题。它不存在的原因是没有代码为zsh 设置它,但有bash。通常,每当打开新的bash 窗口时,都会导出JAVA_HOME 的内容,因此始终为您设置。 Unix & Linux StackExchange site 上有一个很好的线程可能会发生这种情况。

    要在zsh 中执行相同的操作,您可以编辑每次zsh 启动时运行的.zshrc。我找到了一个sample.zshrc,这让我大部分时间都受益匪浅。关键是:

    export JAVA_HOME=`/usr/libexec/java_home`
    

    这是我附加到现有~/.zshrc 文件末尾的文件:

    #zshrc, interactive shell settings
    export ZSH=$HOME/.zsh
    
    # emacs integration
    [[ $EMACS = t ]] && unsetopt zle
    
    # env
    if [[ -e /usr/libexec/java_home ]]; then
      export JAVA_HOME=`/usr/libexec/java_home`
    fi
    
    if [[ -e /usr/local/lib/node_modules ]]; then
      export NODE_PATH=/usr/local/lib/node_modules
    fi
    
    # path
    export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin
    export PATH=/opt/usr/sbin:/opt/sbin:/opt/usr/bin:/opt/bin:$PATH
    export PATH=/usr/local/bin:/usr/local/sbin:$PATH
    export PATH=$HOME/.cabal/bin:$PATH
    export PATH=$HOME/.gem/ruby/1.8/bin:$PATH
    export PATH=$JAVA_HOME/bin:$PATH
    export PATH=$HOME/.bin:$PATH
    
    setopt null_glob
    # source all files in zsh root
    for include in $ZSH/*.zsh; do
      source $include
    done
    
    # source all non-controlled files
    for include in $ZSH/private/*.zsh; do
      source $include
    done
    unsetopt null_glob
    

    然后source ~/.zshrc 在当前shell 中运行(或者只是启动一个新shell),你应该可以看到它是用export | grep JAVA_HOME 设置的。

    我最终还运行了mkdir ~/.zsh 来创建要查找的目录并删除了.cabal.gem 行,因为我不需要它们。

    【讨论】:

      【解决方案2】:

      我刚刚安装了Mac OS Catalina Version 10.15,发现我的.bash_profile中已经设置了JAVA_HOME等环境变量:

      export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home
      export PATH=$JAVA_HOME/bin:$PATH
      export ANDROID_HOME=/Users/mynziak/Library/Android/sdk
      export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
      export M2_HOME=/usr/local/Cellar/maven/3.6.2/libexec
      export M2=${M2_HOME}/bin
      export PATH=${PATH}:${M2_HOME}/bin
      

      其实没有设置!

      我在终端中看到了% 而不是一般的$,这意味着您使用的是zsh shell 而不是bash shell。有了 Catalina,zsh 现在是默认的 shell,而 bash 将在未来完全消失。

      oh-my-zsh 外壳: https://ohmyz.sh/

      所以你必须在 .zshrc 文件中设置所有环境变量。

      我只是将 .bash_profile 中的每个变量复制粘贴到 .zshrc 并重新打开终端。

      文件 .bash_profile.zshrc 被隐藏(cmd+shift+. - 在查找器中显示隐藏文件)但可以在路径中找到:

      /Users/mynziak/.zshrc

      但使用自己的用户名!

      【讨论】:

      • 对于没有此文件的人,只需创建它touch ~/.zshrc
      【解决方案3】:

      当您在 shell 中设置 JAVA_HOME 时,它是活动的并且仅适用于该上下文,并且当您关闭该 shell 时它将消失。

      改为更改全局环境(或)您的 .bashrc 以包含它。这样每次你启动一个 shell 时,该变量都将可用。

      编辑 .profile.bash_profile 以包含 JAVA_HOME。

      export JAVA_HOME=`/usr/lib....`
      

      下面的命令也会返回java主目录的路径。

      /usr/libexec/java_home -v 1.7
      

      其中 1.7 是您想要的版本。

      【讨论】:

        【解决方案4】:

        export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

        export PATH=$JAVA_HOME/bin:$PATH

        ~/.bashrc~/.zshrc 中添加以上两行并使用source 命令重新加载文件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-18
          • 1970-01-01
          • 2018-09-03
          • 1970-01-01
          • 1970-01-01
          • 2020-02-29
          • 2013-08-16
          • 1970-01-01
          相关资源
          最近更新 更多