在Cygwin中导出带空格的JAVA_HOME

时间:2013-01-28 17:01:21

标签: cygwin export space java-home

我正在尝试使用此命令在Cygwin中设置我的JAVA_HOME:

export JAVA_HOME="/cygdrive/c/Program Files/Java/jdk1.7.0_10"

但当我cd $JAVA_HOME时,我会收到此错误:

$ cd $JAVA_HOME
-bash: cd: /cygdrive/c/Program: No such file or directory

我尝试引用并转移空间(即{,\),但没有效果。 知道还有什么呢?

谢谢,

8 个答案:

答案 0 :(得分:15)

我也遇到了这个问题,我看到很多帖子,但没有真正有效。我做了一个小技巧,事情就开始了。

我的JAVA_HOME设置为C:/ Program Files / Java / jdk1.7.0_23。 问题在于Program Files目录,我得到了同样的错误。

在Windows中,为每个目录创建一个简短的名称,其空间没有空格。 您可以通过在命令提示符下运行dir / X命令来查看它。 Program Files的简称是PROGRA~1。

在通过我的电脑的Windows env变量中,我将JAVA_HOME更改为C:/PROGR〜1 / Java / jdk1.7.0_23,并在hadoop-env.sh中将JAVA_HOME更改为/ cygdrv / c / PROGRA~1 / Java /jdk1.7.0_23。

工作正常。

答案 1 :(得分:7)

您正确设置了JAVA_HOME。现在让我们cd正确。

cd "$JAVA_HOME"

答案 2 :(得分:4)

为避免使用繁琐的Windows环境变量,并使用从Windows资源管理器复制的实际路径字符串,我建议将以下内容添加到启动脚本中:

             TMP=`cygpath -sw "C:\Program Files\Java\jdk1.8.0_31"`
export JAVA_HOME=`cygpath -u $TMP`

第一个cygpath调用获得 s hort, w indows路径;第二种方法将其转换为 u nix格式,这在cygwin中运行良好。

这也可以正常工作:

$ cd $JAVA_HOME

答案 3 :(得分:2)

尝试使用短名称以避免路径中的空格。

“C:\ Program Files”应该有短名称C:\ Progra~1(您可以使用DOS dir命令验证它或将其输入到文件浏览器的地址栏中。)

以这种方式设置你的JAVA_HOME:

export JAVA_HOME="/cygdrive/c/Progra~1/Java/jdk1.7.0_10"

答案 4 :(得分:1)

尝试使用DOS subst命令获取JAVA_HOME路径名的空格。 假设驾驶J;未安装或以其他方式使用。

在DOS shell中

subst j: "C:/Program Files/Java/jdk1.7.0_45"

J:现在是C:/ Program Files / Java / jdk1.7.0_45的缩写

你现在可以cd到J:

现在运行Cygwin和

export JAVA_HOME="J:"

答案 5 :(得分:1)

我在" Program Files"之外安装了Java,特别是在c:\ tools中。然后你可以使用cygpath将C:\ tools \ jdk1.8.0_144转换为/cygdrive/c/tools/jdk1.8.0_144

答案 6 :(得分:0)

MSYS2 终端

检查以前的声明: ls "/C/program files/"!有效! -对于长文件名来说,就是这样:

export JAVA_HOME="/D/Devel/jdk-12.0.2"

现在maven可以工作了。...

检查:

user55@DESKTOP MSYS ~
# echo $JAVA_HOME
/D/Devel/jdk-12.0.2

答案 7 :(得分:-1)

您可以提供正常的C:目录路径,如果用“”包围,则不需要转义Program Files中的空格。

export JAVA_HOME="C:/Program Files/Java/jdk1.7.0_45"