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

piy*_*bey 7 macos bash zsh

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

phe*_*ris 20

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

要执行相同的操作zsh,您可以编辑.zshrc每次zsh启动时运行的内容.我发现了一个样本 .zshrc,它让我大部分都在这里.关键是:

export JAVA_HOME=`/usr/libexec/java_home`
Run Code Online (Sandbox Code Playgroud)

这是我附加到现有~/.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
Run Code Online (Sandbox Code Playgroud)

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

我也最终运行mkdir ~/.zsh创建了这个正在寻找的目录,并删除了我不需要的行.cabal.gem行.


dmy*_*inz 7

我刚刚安装了 Mac OS Catalina 版本 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
Run Code Online (Sandbox Code Playgroud)

实际上没有设置!

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

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

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

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

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

/用户/mynziak/.zshrc

但使用自己的用户名!

在此处输入图片说明


K13*_*139 5

在外壳中设置JAVA_HOME时,它是活动的,并且仅可用于该上下文,并且在关闭该外壳时将消失。

而是更改全局环境(或)您的.bashrc以包括它。这样,每次启动外壳程序时,该变量将可用。

编辑.profile.bash_profile以包含JAVA_HOME。

export JAVA_HOME=`/usr/lib....`
Run Code Online (Sandbox Code Playgroud)

并且下面的命令将返回java主目录的路径。

/usr/libexec/java_home -v 1.7
Run Code Online (Sandbox Code Playgroud)

其中1.7是您想要的版本。