我很恼火,但我要做的就是在 Windows 上的 Bash shell 中的 /etc/environment 文件中设置 JAVA_HOME,现在 Windows 中提供了该 shell。我的本地 Java 位于 C:\Program Files\Java\jdk1.8.0_91,因此在我的 /etc/environment 中我输入了
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
export JAVA_HOME="/mnt/c/Program\ Files/Java/jdk1.8.0_91/"
在网上读到,要指定空格,应该使用\
。这样做:
cd /mnt/c/Program\ Files/Java/jdk1.8.0_91/
我可以导航到目录,但如果我将相同的内容放入 /etc/environment 文件中并获取它,如果我运行
echo $JAVA_HOME
/mnt/c/Program\ Files/Java/jdk1.8.0_91/
我可以说这是不正确的,因为它将其读为\,这就是为什么这样做
cd $JAVA_HOME
失败
Ubuntu 14.04.5 LTS
如果有人能建议如何解决这个问题,我将不胜感激。谢谢。
答案1
不要使用 export /etc/environment
,它只是一个简单的文件,而不是脚本。它逐行读取并以此方式设置变量。
再次,它不会运行命令。
答案2
要在 Linux 世界中使用空格,您需要执行以下操作之一(且只能执行其中一项):
引用所有内容:
JAVA_HOME="/mnt/c/Program Files/Java/jdk1.8.0_91/" cd "$JAVA_HOME"
逃离空间:
JAVA_HOME=/mnt/c/Program\ Files/Java/jdk1.8.0_91/ cd "$JAVA_HOME"
但不能同时使用。这里的问题是,引用保护了引用的字符串,并使其按字面意思解释。因此,虽然foo\ bar
表示foo
,一个空格,然后bar
,"foo\ bar"
表示foo
,一个反斜杠,一个空格,然后bar
。
此外,每当您使用变量时,您几乎总是应该将其放在双引号内,否则您传递给它的命令将读取两个参数。如果您通过运行启用 bash 调试,您可以查看出了什么问题set -x
(运行set +x
以将其关闭):
$ set -x
$ cd $JAVA_HOME
+ cd /mnt/c/Program Files/Java/jdk1.8.0_91/
bash: cd: too many arguments
您运行的是cd /mnt/c/Program Files/Java/jdk1.8.0_91/
。由于空格分隔参数,这意味着您传递了cd
两个单独的参数:/mnt/c/Program
和Files/Java/jdk1.8.0_91/
。引用导致cd
(或任何其他工具)将整个内容作为单个参数读取。
进一步阅读:
答案3
现在,您必须为环境设置一个 JAVA_HOME 变量。
请执行以下操作:
找到安装 Java 的路径。(最有可能在 /usr/lib/jvm/{JAVA_VERSION})。
现在在另一个终端上,打开 sudo vi /etc/environment
- 您必须输入:JAVA_HOME="/usr/lib/jvm/java-9-oracle"