2010-06-17 16 views
0

J'ai essayé d'invoquer java à l'intérieur du script bash sur Windows (Win XP) en utilisant cygwin. Cependant, le chemin vers java.exe contient des espaces.comment invoquer java.exe dans bash sous windows dans cygwin avec l'espace dans le chemin

ne mettre literaly dans sometghing bash comme cela a fonctionné:

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

Mon attemts mettre chemin java à une variable a échoué:

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

combinaison également différentes avec cygpath, entre guillemets, crochets ne pas travail. Je ne trouve pas le la bonne combinaison

+0

Avez-vous essayé: export JAVA_EXE = "/ cygdrive/c/Program Files/Java/jdk1.5.0_10/bin/java"? Le problème est probablement d'échapper à cet espace lors de la définition d'une variable entre guillemets. –

+0

Vous ne savez pas si cela fonctionnera, mais avez-vous essayé d'utiliser plutôt le shortname DOS 8.3? c'est-à-dire Progra ~ 1 plutôt que "Program \ Files". –

Répondre

0

mettre des guillemets autour $JAVA_EXE:

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

Le problème est que chaque fois qu'une variable est développée, est aussi divisé en mots à espaces, sauf si vous mettez des guillemets autour de lui. Donc, si vous ne voulez pas que les choses soient brisées dans les espaces, vous avez besoin de citations. Une autre alternative est d'utiliser toujours des noms abrégés (DOS) pour les choses, qui n'autorisent pas les espaces. Pour voir ce que le nom court est, exécutez

cygpath -d "$JAVA_EXE" 

pour convertir ce retour à un chemin de Cygwin unix, utilisez

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

merci pour vos idées. Cela a fonctionné dans la bonne combinaison. Le problème était que j'échappais au caractère espace et en même temps mettre JAVA_EXE entre guillemets.

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

produisent cet effet:

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

d'autre part, la conversion de DOS 8.3 ne fonctionne pas non plus:

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

\ bin \ java

Enfin, mettant JAVA_EXE entre guillemets mais sans s'échapper d'espace dans le chemin aileron travaillé e pour moi:

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

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