从bash脚本执行java程序不起作用

时间:2013-11-18 11:08:33

标签: java bash shell scripting

我正在尝试从bash脚本运行java程序(weka)。该脚本将输入文件,输出文件和包含运行java程序的命令的文件内容(环境变量$CMD)作为参数。该脚本无法正常工作,并通知我我使用java的未知选项。我试图回显程序发送到shell的命令,输出正是正确的命令。所以我假设echo输出和发送到shell的命令不一样。

所以请告诉我:我做错了什么?

我得到的输出有什么区别......

  

回显“java $(cat $ CMD)$ in> $ out”

...和计算机得到的命令?

  

java“$(cat $ CMD)”$ in> $出

如果需要更多信息,请发表评论!

编辑:

对于那些熟悉weka(或熟悉java)的人来说,这就是我想要的,以及echo打印给我的内容:

java -cp /usr/share/java/weka.jar weka.filters.supervised.attribute.AttributeSelection -E "weka.attributeSelection.ClassifierSubsetEval -B weka.classifiers.bayes.NaiveBayes -T" -S "weka.attributeSelection.BestFirst -D 1 -N 14" -i /home/aldorado/weka_examples/iris.arff > /home/aldorado/weka_examples/irisselected131113.txt

1 个答案:

答案 0 :(得分:3)

在引起麻烦的行之前添加set -x

这将使计算机再次按照它的理解打印命令。你会看到像

这样的东西
 + 'java' '-classpath weka.jar name.of.the.main.Class' 'inputFile' > 'outputFile'

请注意shell使用的引号告诉你“这对我来说是一个词/参数”。注意空白和引用问题是非常有用的。

请注意,java "$(cat $CMD)" $in > $out之类的工作非常困难。我建议将java移到$CMD。这将允许你说:

bash "./$CMD" $in > $out

或者,如果您使文件可执行:

"./$CMD" "$in" > $out

使用"$1"文件中的$CMD获取引用"$in"的属性:

cp="weka.jar"
cp="$cp;other.jar"
cp="$cp;more.jar"
cp="$cp;foo.jar"

java -classpath "$cp" name.of.the.main.Class "$1"