0

Cygwinを使用して、Windows(Win XP)のbashスクリプト内でJavaを呼び出そうとしました。ただし、java.exe へのパスにはスペースが含まれています。

文字通り、このようなbashの何かを入れるだけでうまくいきました:

/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 を引用符で囲んでいたことでした。

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 に答える
0

引用符で囲みます$JAVA_EXE:

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

問題は、変数が展開されるたびに、引用符を付けない限り、スペースで単語に分割されることです。したがって、スペースで壊れたくない場合は、引用符が必要です。

もう 1 つの方法は、スペースを許可しない短い (DOS) 名を常に使用することです。短い名前が何であるかを確認するには、実行します

cygpath -d "$JAVA_EXE"

それを unix のような cygwin パスに変換するには、次を使用します。

cygpath -u $(cygpath -d "$JAVA_EXE")
于 2010-06-17T18:28:13.393 に答える