スクリプトは実行されていませんが、同じコマンドが対話的に機能しているようです。最初に*ワイルドカードを試してみましたが、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呼び出しで同じことをしても害はありません。
あなたの作品は "-classpath"を文字列として扱うことの弊害を理解していません。 – H2ONaCl
これも失敗しますが、理由はわかりません... CLASSPATH = ' - classpath export/ohana1/"*"' java -enableassertions $ CLASSPATH info.zqxj.trader1.CommandProcessor help – H2ONaCl
この2番目の例では、 -classpath stringは二重引用符で囲まれていません。 – H2ONaCl