2016-11-06 6 views
1

Возможно ли использовать «длинные» параметры для параметров командной строки с apache.commons.cli.CommandLineParser в java? 'Да', я имею в виду не одно слово, а предложение в блок кавычки ('"') приложения Java в настоящее время запускается из файла баш-скриптapache.commons.cli и «длинные» параметры командной строки в Java

Script файл:..

#!/bin/bash 
java -cp <classpath> MyClass [email protected] 

вызовов (который возвращает только «длинные» для «-p» аргумент и «другой» для «-r» аргумент):

./script.sh -p "long parameter" -r "another long parameter" 

Теперь я могу делать только что-то вроде этого, чтобы получить «длинный параметр» строка:

./script.sh -p "long" -p "parameter" 

Конечно, я могу добавить «-p» программно столько раз, сколько необходимо, но это мешает мне использовать значения параметров «-», поскольку мне нужно отслеживать другие ключи командной строки. Кроме того, это, кажется, далеко не правильный подход.

опции командной строки созданы так:

org.apache.commons.cli.Options options = new Options(); 
options.addOption(Option.builder("p").longOpt("param").hasArg().desc("parameter description").build()); 

А затем разобран так:

CommandLineParser parser = new DefaultParser(); 
CommandLine   line = parser.parse(options, args); 
if (line.hasOption('p')) params = line.getOptionValues("param"); 
+0

'longOpt' относится к _NAME_ опциона, не длина стоимости опциона. Независимо от того, передана ли длинная строка вашему коду, зависит от задействованной оболочки. Какую ОС и оболочку вы используете? –

+0

Я делаю это на MacOSX в оболочке Bash – kami

+0

Какую оболочку вы используете, и она использует двойные кавычки для окружения? –

ответ

1

Наконец он получил четкие (благодаря Jim Garrison), что проблема вызвана вызывающему класса Java из bash-script (передача всех аргументов с помощью $ @). Обертка $ @ в двойные кавычки в скрипте решила проблему. Как это:

#!/bin/bash 
java -cp <path> MyClass "[email protected]" 

вместо неправильного

#!/bin/bash 
java -cp <path> MyClass [email protected]