2011-10-19 8 views
2

WindowsマシンのmsysのbashスクリプトからいくつかのJavaプログラムを実行しようとしています。具体的には、コマンドラインでWEKAを使用していくつかのタスクを自動化しています。引用符で囲まれた文字列がJavaに正しく渡されない問題があります。実際のコードは実行するコマンドの配列をループします。ここでは、削除されたバージョン、つまり$RUNに配列要素文字列が含まれている1回の繰り返しがあります。msysのスクリプトで引用された文字列引数を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"は二つの引数に分割された文字列であるようです。どのようにそれらを1つの議論に組み合わせることができますか?

mintty端末では、Windows 7のmsysを使用しています。

+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

関連する問題