как вызвать java.exe в bash под windows в cygwin с пробелом в пути - PullRequest
0 голосов
/ 17 июня 2010

Я пытался вызвать Java внутри скрипта Bash на Windows (Win XP) с помощью Cygwin. Однако путь к 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, кавычками, скобками. Я не нахожу правильную комбинацию

Ответы [ 2 ]

0 голосов
/ 18 июня 2010

спасибо за ваши идеи. Это сработало в правильной комбинации. Проблема заключалась в том, что я избегал пробела и одновременно помещал 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"
0 голосов
/ 17 июня 2010

Поместите кавычки вокруг $JAVA_EXE:

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

Проблема в том, что каждый раз, когда переменная раскрывается, она также разбивается на слова в пробелах, ЕСЛИ вы не ставите кавычки вокруг нее.Поэтому, если вы не хотите, чтобы вещи разбивались на пробелы, вам нужны кавычки.

Другая альтернатива - всегда использовать короткие (DOS) имена для вещей, которые не допускают пробелов.Чтобы увидеть короткое имя, запустите

cygpath -d "$JAVA_EXE"

, чтобы преобразовать его обратно в unig-подобный путь cygwin, используя

cygpath -u $(cygpath -d "$JAVA_EXE")
...