Передача цитируемого строкового аргумента в Java в сценарии в MSYS - PullRequest
2 голосов
/ 19 октября 2011

Я пытался запустить некоторые Java-программы из сценария bash в msys на компьютере с Windows.В частности, я автоматизирую некоторые задачи, используя WEKA в командной строке.У меня есть некоторые проблемы, когда строка в кавычках не передается правильно в Java.Фактический код перебирает массив команд для запуска.Вот урезанная версия, то есть одна итерация, где $RUN содержит строку элемента массива.

#!/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, msys с терминалом mintty.

1 Ответ

0 голосов
/ 19 октября 2011

Попробуйте этот обходной путь:

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
...