在Cygwin中导出带有空格的JAVA_HOME

在Cygwin中导出带有空格的JAVA_HOME,cygwin,export,space,java-home,Cygwin,Export,Space,Java Home,我正试图使用以下命令在Cygwin中设置JAVA_主页: 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 我试着引用,并避开空格(即,\),但都没有成功。 你知道还有什么吗 谢谢,您正确设置了JAVA\u HOME

我正试图使用以下命令在Cygwin中设置JAVA_主页:

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
我试着引用,并避开空格(即,
\
),但都没有成功。 你知道还有什么吗


谢谢,

您正确设置了
JAVA\u HOME
。现在让我们也正确地播放cd

cd "$JAVA_HOME"

尝试使用短名称以避免路径中出现空格

“C:\Program Files”应具有短名称C:\Progra~1(您可以使用DOS dir命令或将其输入到文件资源管理器的地址栏中进行验证)

按以下方式设置JAVA_主页:

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

我也面临着这个问题,我看到了很多帖子,但都没有真正起作用。我做了一个小把戏,事情开始起作用了

我的JAVA_主页设置为C:/Program Files/JAVA/jdk1.7.0_23。 问题是程序文件目录,我得到了相同的错误

在Windows中,每个目录都有一个简短的名称,其中有一个空格,而没有空格。 您可以通过在命令提示符下运行dir/X命令来查看它。 程序文件的简称是PROGRA~1

在Windows环境变量中,我通过我的计算机将JAVA_HOME更改为C:/PROGR~1/JAVA/jdk1.7.0_23,在hadoop-env.sh中,我将JAVA_HOME更改为/cygdrv/C/PROGRA~1/JAVA/jdk1.7.0_23


它工作得很好。

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

在DOS外壳中

subst j: "C:/Program Files/Java/jdk1.7.0_45"
J:现在是C:/ProgramFiles/Java/jdk1.7.045的缩写

您现在可以将cd刻录到J:

现在运行Cygwin和

export JAVA_HOME="J:"

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

             TMP=`cygpath -sw "C:\Program Files\Java\jdk1.8.0_31"`
export JAVA_HOME=`cygpath -u $TMP`
第一个
cygpath
调用获得short、windows路径;第二种方法将其转换为unix格式,该格式在cygwin中运行良好

这现在也可以正常工作:

$ cd $JAVA_HOME

我在“程序文件”之外安装了Java,特别是在c:\tools中。然后,您可以使用cygpath在MSYS2终端上将C:\tools\jdk1.8.0\u 144转换为/cygdrive/C/tools/jdk1.8.0\u 144

检查以前的索赔:
ls”/C/程序文件/“
!工作-这适用于长文件名,因此,请注意:

export JAVA_HOME="/D/Devel/jdk-12.0.2"
现在maven工作了

检查:

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

那么
ls“$JAVA_HOME”
呢?当它不工作时,新的错误消息是什么?顺便问一下,它是64位系统吗?有一些程序文件重定向到涉及的程序文件(x86),可能cygwin 32位的东西根本看不到你真正的程序文件。是的,有一个程序文件(x86),但我在程序文件中也有东西(出于历史原因)。ls命令返回与cd命令相同的错误。当您
cd
没有双引号时,您发布了命令和错误消息。现在用双引号为
cd
发布相同的内容。还要尝试逐个元素检查它:
ls”/cygrive/c/Program Files/“
是否显示Java子目录?那么
ls”/cygrive/c/Program Files/Java/“
呢?(需要了解的主要问题是,我们已经通过使用双引号解决了变量的问题。剩下的是文件系统的问题)。当cd命令嵌入到脚本中时,这种解决方案没有多大用处,例如启动tomcat的脚本。我不想编辑tomcat脚本来让它工作,一个更好的解决方案是使用windows短名称,尽管我觉得这样做比其他任何事情都突出了Cygwin中的一个缺点。+1-只是一个注释-您必须重新启动Cygwin会话才能检测到修改过的环境变量。注意“C:\Program Files(x86)”是“/cygdrive/c/PROGRA~2”您需要引用cd命令:
cd“JAVA\u HOME”
伟大的解决方案!谢谢我不得不在Java8和Java11之间切换,这在Windows上是一场噩梦。这篇文章救了我一命!。如果无法选择安装目录,请使用cygwin创建一个软链接,该链接的路径没有空格,并将JAVA_HOME设置为该位置。