2016-09-06 3 views
0

スクリプトは実行されていませんが、同じコマンドが対話的に機能しているようです。最初に*ワイルドカードを試してみましたが、Linuxの解釈ではなく、ワイルドカードにJavaの解釈が必要なため、おそらく「見つけることができないか読み込めませんでした。だから私はワイルドカードを引用し、それが動作します:(Javaはワイルドカードを取得し、 "すべてのJARファイル"を意味すると解釈します)。次に、スクリプトから同じものを試してみると失敗します。対話的なJavaの呼び出しは正常ですが、スクリプト内で同じエラーが発生します

[email protected]:~/serverDeployment/application# java -enableassertions 
-classpath export/ohana1/* info.zqxj.trader1.CommandProcessor help 
Error: Could not find or load main class export.ohana1.commons-collections-3.2.1.jar 
[email protected]:~/serverDeployment/application# java -enableassertions 
-classpath export/ohana1/"*" info.zqxj.trader1.CommandProcessor help 
AssertionsEnabled 
echoing arguments at the runtime local date 2016 09 06 local time 17:15:01.4... 
help 
END of echoed arguments. 
CommandProcessor: Will process the >help< argument. 
CommandProcessor: END of processing the >help< argument. 
[email protected]:~/serverDeployment/application# cat runner.sh 
#!/bin/bash 
CLASSPATH='-classpath export/ohana1/"*"' 
echo "$CLASSPATH" 
java -enableassertions "$CLASSPATH" info.zqxj.trader1.CommandProcessor help 
exit 0 

[email protected]:~/serverDeployment/application# ./runner.sh 
-classpath export/ohana1/"*" 
Unrecognized option: -classpath export/ohana1/"*" 
Error: Could not create the Java Virtual Machine. 
Error: A fatal exception has occurred. Program will exit. 

オプションが-classpathですが、何らかの理由で全体-classpath export/ohana1/"*"はオプションであると解釈されます。なぜこうなった?

編集:Costi Ciudatuは、文字列-classpathを二重引用符で囲んでいることを指摘しています。これは、java呼び出しの行で二重引用符で囲まれているため、この例ではやりません。しかし、それでも失敗します。

[email protected]:~/serverDeployment/application# cat runner.sh 
#!/bin/bash 
CLASSPATH='-classpath export/ohana1/"*"' 
echo $CLASSPATH 
java -enableassertions $CLASSPATH info.zqxj.trader1.CommandProcessor help 
[email protected]:~/serverDeployment/application# ./runner.sh 
-classpath export/ohana1/"*" 
Error: Could not find or load main class info.zqxj.trader1.CommandProcessor 

ところで:echoコマンドは、両方の時間が、私は単一引用符の内容を取得し、二重引用符は問題はありませんことを示していると思われます。だからecho "$VAR"echo $VARと同じように見えますが、おそらくjava呼び出しで同じことをしても害はありません。

答えて

1

これは、オプションと値の両方を二重引用符で囲むために発生します。

#!/bin/bash 
CLASSPATH='export/ohana1/*' 
java -enableassertions -cp "$CLASSPATH" info.zqxj.trader1.CommandProcessor help 
+0

あなたの作品は "-classpath"を文字列として扱うことの弊害を理解していません。 – H2ONaCl

+0

これも失敗しますが、理由はわかりません... CLASSPATH = ' - classpath export/ohana1/"*"' java -enableassertions $ CLASSPATH info.zqxj.trader1.CommandProcessor help – H2ONaCl

+0

この2番目の例では、 -classpath stringは二重引用符で囲まれていません。 – H2ONaCl

関連する問題