在 OSX 上将 shell 从 Bash 更改为 Zsh 时未找到 Java_HOME?
Java_HOME not found when changed shell from Bash to Zsh on OSX?
这很奇怪,我已经为我的 mac 设置了 JAVA_HOME,这可以在我使用 bash shell 时找到,但是如果我更改 shell,我收到一条消息说 JAVA_HOME 未设置。这里可能发生了什么?
当您在 shell 中设置 JAVA_HOME 时,它将处于活动状态并且仅适用于该上下文,并且当您关闭 shell 时它将消失。
改为更改全局环境(或)您的 .bashrc 以包含它。这样每次启动一个shell,变量就可用
编辑 .profile
或 .bash_profile
以包含 JAVA_HOME。
export JAVA_HOME=`/usr/lib....`
并且下面的命令将 return java 主目录的路径。
/usr/libexec/java_home -v 1.7
其中 1.7 是您想要的版本。
我在从 bash 迁移到 oh-my-zsh 时试图解决同样的问题时偶然发现了你的问题。它不存在的原因是没有代码为 zsh
设置它,但有 bash
。通常,每当打开新的 bash
window 时,都会导出 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(或者只是开始一个新的)你应该能够看到它设置为export | grep JAVA_HOME
.
我还结束了 运行ning mkdir ~/.zsh
来创建正在寻找的目录并删除了 .cabal
和 .gem
行,因为它们对我来说不是必需的.
我刚刚安装了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 shell:
https://ohmyz.sh/
所以你必须在 .zshrc 文件中设置所有环境变量。
我只是将 .bash_profile 中的每个变量复制粘贴到 .zshrc 并重新打开终端。
文件 .bash_profile 和 .zshrc 是隐藏的(cmd+shift+. - 在 finder 中显示隐藏文件)但是可以在路径中找到:
/Users/mynziak/.zshrc
但使用自己的用户名!
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
export PATH=$JAVA_HOME/bin:$PATH
在 ~/.bashrc
或 ~/.zshrc
中添加以上 2 行,然后使用 source 命令重新加载文件。
这很奇怪,我已经为我的 mac 设置了 JAVA_HOME,这可以在我使用 bash shell 时找到,但是如果我更改 shell,我收到一条消息说 JAVA_HOME 未设置。这里可能发生了什么?
当您在 shell 中设置 JAVA_HOME 时,它将处于活动状态并且仅适用于该上下文,并且当您关闭 shell 时它将消失。
改为更改全局环境(或)您的 .bashrc 以包含它。这样每次启动一个shell,变量就可用
编辑 .profile
或 .bash_profile
以包含 JAVA_HOME。
export JAVA_HOME=`/usr/lib....`
并且下面的命令将 return java 主目录的路径。
/usr/libexec/java_home -v 1.7
其中 1.7 是您想要的版本。
我在从 bash 迁移到 oh-my-zsh 时试图解决同样的问题时偶然发现了你的问题。它不存在的原因是没有代码为 zsh
设置它,但有 bash
。通常,每当打开新的 bash
window 时,都会导出 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(或者只是开始一个新的)你应该能够看到它设置为export | grep JAVA_HOME
.
我还结束了 运行ning mkdir ~/.zsh
来创建正在寻找的目录并删除了 .cabal
和 .gem
行,因为它们对我来说不是必需的.
我刚刚安装了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 shell: https://ohmyz.sh/
所以你必须在 .zshrc 文件中设置所有环境变量。
我只是将 .bash_profile 中的每个变量复制粘贴到 .zshrc 并重新打开终端。
文件 .bash_profile 和 .zshrc 是隐藏的(cmd+shift+. - 在 finder 中显示隐藏文件)但是可以在路径中找到:
/Users/mynziak/.zshrc
但使用自己的用户名!
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)
export PATH=$JAVA_HOME/bin:$PATH
在 ~/.bashrc
或 ~/.zshrc
中添加以上 2 行,然后使用 source 命令重新加载文件。