2016-04-15 17 views
0

Kann dies nicht unser oder erstellen Sie ein Beispiel, das dies reproduzieren kann.cygwin bash forward slash in umgekehrten Schrägstrich konvertiert

Am mit einer externen sh-Datei versucht, der hadoop sh Datei

myfile.sh

# workingdir = /data1/some/path/lib 
WORKINGDIR=`cygpath -p -w -m "$WORKINGDIR"` 
# so the above in windows land is C:/some/path/lib 
# HADOOPCMD essentially is a call to hadoop.sh 
$HADOOPCMD jar $WORKINGDIR/myjar.jar 

hadoop.sh

echo "[email protected]" // still C:/some/path/lib 
exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "[email protected]" 

jedoch, wenn "$ @" in aufzurufen erweitert wird cygwin der resultierende Pfad wird C: \ some \ path \ lib und dann die hadoop.sh Beschwerden, dass es das jar nicht finden kann ... Keine gültige JAR: C: \ some \ Pfad \ lib

Allerdings, wenn ich den Pfad in myfile.sh fest codieren würde; es funktioniert

$HADOOPCMD jar C:/some/path/lib/myjar.jar 

Frage

  1. warum die "$ @" der Befehl exec das/ändern in der WORKINGDIR Variable \?
  2. Warum funktioniert der hardcoded Pfad?
  3. Wie man dies mit variabler Substitution zur Arbeit bringt?
+0

hmm .. Ich glaube, ich wurde es unter Angabe der $ WORKINGDIR zu arbeiten, damit der Befehl $ HADOOPCMD jar „$ WORKINGDIR“ ist /myjar.jar – sunny

+0

Allgemeine Faustregel "Zitiere immer deine variablen Erweiterungen". –

Antwort

0

die Variable Zitiert arbeitet "$WORKINGDIR"/myjar.jar