Linux子系统Linux无法识别JAVA_HOME环境变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux子系统Linux无法识别JAVA_HOME环境变量相关的知识,希望对你有一定的参考价值。
我正在尝试让WSL识别我的Windows安装的JAVA_HOME环境变量。我附上了我在bashrc中的内容以及我在windows环境变量中的内容以及cmd和bash的输出。
什么是我的bashrc的结尾:
export JAVA_HOME="/mnt/d/Program Files/Java/jdk-11.0.1"
export PATH="/mnt/d/Program Files/Java/jdk-11.0.1/bin:$PATH"
CMD INPUT / OUTPUT:
C:Usersjaall>javac --version
javac 11.0.1
BASH INPUT / OUTPUT:
myubuntu_name@DESKTOP-LUK3BII:~$ javac --version
Command 'javac' not found, but can be installed with:
sudo apt install default-jdk
sudo apt install openjdk-11-jdk-headless
sudo apt install ecj
sudo apt install openjdk-8-jdk-headless
我已经坚持了一段时间,无法弄明白或在线找到有效的解决方案。谢谢!
答案
正如Biswapriyo建议的那样,你应该使用WSLENV。
- 打开PowerShell。然后将JAVA_HOME设置为java安装的路径。
- 在你的情况下,运行
setx JAVA_HOME "D:Program FilesJavajdk-11.0.1"
您应该看到一条消息“SUCCESS:保存了指定的值”。
- 然后运行
setx WSLENV "JAVA_HOME/p"
您应该再次看到成功消息。
- 在WSL bash提示符中输入“env”。
你应该在这一点上看到JAVA_HOME正确设置了。
注意:如果步骤2不起作用,您可能希望将路径更改为JAVA_HOME以包含“ bin”文件夹。
另一答案
由于我从未能够轻松地在两个系统之间共享变量,因此我提出了一个简单的bash函数,它可以轻松检索(并定义,如果要求)任何Windows环境变量。它还处理路径,以便它们从Win32转换为Un * x-line。
我把这个添加到/etc/bash.bashrc
:
winenv()
{
if [ "$#" == "0" ] || [ "$1" == "--help" ]
then
echo $'
'Usage:
echo $' 'winenv [-d] WINDOWS_ENVIRONEMENT_VARIABLE_NAME
echo $' '-d: Defines environment variable in current shell
echo $' Note that paths will be translated into un*x-like paths
'
return
fi
local IFS='$
'
local PATH_TO_TRANSLATE=$1
[ "$1" == "-d" ] && PATH_TO_TRANSLATE=$2
local VAR=$(cmd.exe /c echo %${PATH_TO_TRANSLATE}% | tr -d '
')
local NEW=$(wslpath -u "${VAR}" 2>/dev/null || echo ${VAR})
echo "${PATH_TO_TRANSLATE} = ${VAR} -> ${NEW}"
[ "$1" == "-d" ] && export "${PATH_TO_TRANSLATE}=${NEW}"
}
我要做的只是打电话给winenv PROGRAMFILES
(例如)
或者,如果我希望导出它,我只需要在变量名之前添加-d参数,如winenv -d WINDIR
。
以上是关于Linux子系统Linux无法识别JAVA_HOME环境变量的主要内容,如果未能解决你的问题,请参考以下文章