在OSX上将shell从Bash更改为Zsh时找不到Java_HOME?

时间:2015-05-29 19:51:50

标签: macos bash zsh

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

3 个答案:

答案 0 :(得分:16)

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

要在zsh中执行相同的操作,您可以编辑每次.zshrc启动时运行的zsh。我找到了一个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中运行(或者只是启动一个新的),您应该能够看到它已设置为export | grep JAVA_HOME

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

答案 1 :(得分:5)

当您在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是您想要的版本。

答案 2 :(得分:1)

我刚刚安装了Mac OS Catalina版本10.15,发现环境变量(例如JAVA_HOME以及在.bash_profile中设置的其他变量):

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

实际上没有设置!

我在终端中看到了%,而不是一般的$,这意味着您正在使用

  

oh-my-zsh shell:   https://ohmyz.sh/

因此,您必须在 .zhrc 文件中设置所有环境变量。

我只是将每个变量从 .bash_profile 复制粘贴到 .zhrc ,然后重新打开终端。

文件 .bash_profile .zhrc 被隐藏(cmd + shift +。-在finder中显示隐藏文件),但可以在路径中找到:

  

/Users/mynziak/.zshrc

但是使用自己的用户名!

enter image description here