我正在尝试从 bash 脚本运行 java 程序 (weka)。该脚本将输入文件、输出文件和包含运行 java 程序的命令的文件内容作为参数(环境变量 $CMD
)。该脚本无法按我的意愿运行,并通知我我使用了一个未知的 java 选项。我试图回显程序发送到 shell 的命令,输出正是正确的命令。所以我假设 echo 输出和发送到 shell 的命令是不一样的。
所以请告诉我:我做错了什么?
我得到的输出有什么区别...
echo "java $(cat $CMD) $in > $out"
...以及计算机收到的命令?
java "$(cat $CMD)" $in > $out
如果需要更多信息,请发表评论!
biên tập:
对于那些熟悉 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
在引起问题的行之前添加set -x
.
这将使计算机按照它理解的方式再次打印命令。你会看到类似的东西
+ 'java' '-classpath weka.jar name.of.the.main.Class' 'inputFile' > 'outputFile'
请注意 shell 用来告诉您“这对我来说是一个词/一个论点”的引号。注意空格和引号问题非常有用。
请注意,像 java "$(cat $CMD)"$in > $out
这样的东西很难工作。我建议将 java
di chuyển đến $CMD
中。这将允许你说:
bash "./$CMD" $in > $out
或者,如果您使文件可执行:
"./$CMD" "$in" > $out
在文件 $CMD
được sử dụng trong "$1"
获取对 "$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"
Tôi là một lập trình viên xuất sắc, rất giỏi!