我正在尝试从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
答案 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"