无法在 Ubuntu 中设置 JAVA_HOME,因为 /etc/environment 中的路径中有空格

无法在 Ubuntu 中设置 JAVA_HOME,因为 /etc/environment 中的路径中有空格

我很恼火,但我要做的就是在 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 世界中使用空格,您需要执行以下操作之一(且只能执行其中一项):

  1. 引用所有内容:

    JAVA_HOME="/mnt/c/Program Files/Java/jdk1.8.0_91/"
    cd "$JAVA_HOME"
    
  2. 逃离空间:

    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/ProgramFiles/Java/jdk1.8.0_91/。引用导致cd(或任何其他工具)将整个内容作为单个参数读取。

进一步阅读:

答案3

现在,您必须为环境设置一个 JAVA_HOME 变量。

请执行以下操作:

  1. 找到安装 Java 的路径。(最有可能在 /usr/lib/jvm/{JAVA_VERSION})。

  2. 现在在另一个终端上,打开 sudo vi /etc/environment

  3. 您必须输入:JAVA_HOME="/usr/lib/jvm/java-9-oracle"

相关内容