2011-10-19 12 views
2

我一直在嘗試從windows計算機上msys中的bash腳本運行一些java程序。具體來說,我在命令行上使用WEKA自動執行一些任務。我有一些問題,引號字符串沒有正確傳遞給java。實際的代碼循環遍歷一組要運行的命令。這是一個精簡版本,即一個迭代,其中$RUN包含數組元素字符串。在MSD腳本中將引用的字符串參數傳遞給java

#!/bin/bash 

export CLASSPATH=CLASSPATH:weka.jar:libsvm.jar 

RUN="java weka.classifiers.functions.LibSVM -S 0 -K 2 -D 3 -G 0.0 -R 0.0 -N 0.5 -M 1000.0 -C 1000000.0 -E 0.0010 -P 0.1 -Z -W '1 2' -t trainFile.csv -T testFile.csv " 

# does not work, returns => Weka exception: For input string: "'1" 
$RUN > reportFile.txt 

RUN="java weka.classifiers.functions.LibSVM -S 0 -K 2 -D 3 -G 0.0 -R 0.0 -N 0.5 -M 1000.0 -C 1000000.0 -E 0.0010 -P 0.1 -Z -W \"1 2\" -t trainFile.csv -T testFile.csv " 

# does not work, returns => Weka exception: For input string: ""1" 
$RUN > reportFile.txt 

RUN="java weka.classifiers.functions.LibSVM -S 0 -K 2 -D 3 -G 0.0 -R 0.0 -N 0.5 -M 1000.0 -C 1000000.0 -E 0.0010 -P 0.1 -Z -t trainFile.csv -T testFile.csv " 

# works without the string argument for -W 
$RUN > reportFile.txt 

看來問題是字符串"1 2"被分成兩個參數。他們怎樣才能被合併成一個論點?

我正在使用Windows 7,0 msysmintty終端。

+0

測試在Linux中。對於同樣的問題不能很好地工作。看起來我的陳述引用和執行有問題。 – devil

+0

發現瞭解決方案。但我還不能自己回答。 – devil

回答

0

嘗試以下解決方法:

RUN="weka.classifiers.functions.LibSVM -S 0 -K 2 -D 3 -G 0.0 -R 0.0 -N 0.5 -M 1000.0 -C 1000000.0 -E 0.0010 -P 0.1 -Z -W \"1 2\" -t trainFile.csv -T testFile.csv" 
echo $RUN | xargs java > reportFile.txt 
+1

該解決方案有效。但我找到了一個更簡單的解決方案: 'eval $ RUN> reportFile.txt' – devil