WSL 由于空间原因无法找到文件或目录

问题描述

我最初得到的错误是 wsl 无法找到 JAVA_HOME。在我运行命令之后

export JAVA_HOME="/mnt/c/Program Files/JAVA/jdk-15.0.2"

现在它给我的错误是:

ERROR: JAVA_HOME is set to an invalid directory: /mnt/c/Program Files/Java/jdk-15.0.2

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.

当我跑步时

${JAVA_HOME}

检查变量我得到响应

bash: /mnt/c/Program: No such file or directory

我认为这是由于文件名中的空格造成的。网上说空间应该不是问题,因为它用引号引起来,所以我不知道在这里做什么。

任何帮助将不胜感激!

解决方法

您似乎正在尝试在 WSL 中使用 Windows 版本的 Java。这应该是可能的,但您目前正在导出一个 Linux 样式的路径,Windows 版本无法处理该路径(如您所见)。

如果您同时安装了 Windows 和 Linux 版本的 Java,请参阅 this answer 以获取一些相关信息。问题是关于 npm,但核心问题是一样的——Windows 版本在 Linux 版本之前的路径中越来越多。

如果您只有 Windows 版本,那么至少将 JAVA_HOME 修改为“C:\Program Files\JAVA\jdk-15.0.2”(注意 Linux 中反斜杠的潜在引用问题-shell 字符串,虽然)。我不确定这是否会解决您的所有问题——我自己从未尝试过通过 WSL 运行 Windows Java 版本。但这至少是您克服当前错误所需采取的第一步。

当您只执行 ${JAVA_HOME} 时的第二个错误是意料之中的,因为您试图将这个目录(带有空格)作为命令执行 . shell 将空格前的部分解释为命令,将空格后的部分解释为参数。如果您将其设置为没有空格的目录,则在尝试执行时仍会收到错误消息(就像您现在这样),只是它类似于 {{1 }}。

如果您只是想检查一下,请使用 bash: /mnt/c: Is a directory