0

我尝试使用 cygwin 在 Windows(Win XP)上的 bash 脚本中调用 java。但是 java.exe 的路径包含空格。

只有字面上这样的 bash sometghing 才有效:

/cygdrive/c/Program\ Files/Java/jdk1.5.0_10/bin/java -cp "$TOOL_HOME" DateParse  "$DATE" "$FORMAT"

我将 java 路径放入变量的尝试失败:

export JAVA_EXE="/cygdrive/c/Program\ Files/Java/jdk1.5.0_10/bin/java"
$JAVA_EXE -cp "$TOOL_HOME" DateParse  "$DATE" "$FORMAT"

与 cygpath、引号、括号的不同组合也不起作用。我没有找到正确的组合

4

2 回答 2

0

在周围加上引号$JAVA_EXE

"$JAVA_EXE" -cp "$TOOL_HOME" DateParse  "$DATE" "$FORMAT"

问题是每次扩展变量时,它也会在空格处分解成单词,除非你在它周围加上引号。因此,如果您不想在空格处破坏内容,则需要引号。

另一种选择是始终对事物使用短 (DOS) 名称,不允许使用空格。要查看简称是什么,请运行

cygpath -d "$JAVA_EXE"

要将其转换回类似 unix 的 cygwin 路径,请使用

cygpath -u $(cygpath -d "$JAVA_EXE")
于 2010-06-17T18:28:13.393 回答
0

谢谢你的想法。它以适当的组合工作。问题是我正在转义空格字符,同时将 JAVA_EXE 放在引号中。

export JAVA_EXE="/cygdrive/c/Program Files/Java/jdk1.5.0_10/bin/java"
"$JAVA_EXE" -cp "$TOOL_HOME" DateParse  "$DATE" "$FORMAT"

产生这种效果:

line 30: /cygdrive/c/Program\ Files/Java/jdk1.5.0_10/bin/java: No such file or directory

另一方面,转换为 DOS 8.3 也不起作用:

cannot create short name of \\?\C:\Program\ Files\Java\jdk1.5.0_10

\bin\java

最后,将 JAVA_EXE 放在引号中但没有在路径中转义空间对我来说效果很好:

export JAVA_EXE="/cygdrive/c/Program Files/Java/jdk1.5.0_10/bin/java"

"$JAVA_EXE" -cp "$TOOL_HOME" DateParse  "$DATE" "$FORMAT"
于 2010-06-18T09:57:34.413 回答