2013-01-12 3 views
0

Я создал очень простой скрипт и хотел бы передать аргументы скрипту.Скрипт Grails и прохождение параметров с помощью Groovy CLIBuilder?

нравится:

grails> helloworld -n Howdy 
grails> helloworld -name Howdy 

со сценарием:

target(main: 'Hello World') { 
    def cli = new CliBuilder() 
    cli.with 
      { 
       h(longOpt: 'help', 'Help - Usage Information') 
       n(longOpt: 'name', 'Name to say hello to', args: 1, required: true) 
      } 
    def opt = cli.parse(args) 
    if (!opt) return 
    if (opt.h) cli.usage() 
    println "Hello ${opt.n}" 
} 

я, похоже, не в каждой попытке, что я делаю. Сценарий продолжает жаловаться на отсутствие опции -n.

Когда я отлаживаю скрипт, значение параметра args выглядит так, что значения переупорядочены.

При вызове сценария с:

grails> helloworld -n Howdy 

значение арг внутри сценария: Хауди -n

Что я упускаю здесь делаю неправильно? Какие-либо предложения?

ответ

1

Ваша проблема в том, что вы используете свой код через оболочку grails. Я конвертируется ваш код CLI.groovy как это:

class CLI{ 
public static void main(String [] args){ 
    def cli = new CliBuilder() 
    cli.with 
      { 
       h(longOpt: 'help', 'Help - Usage Information') 
       n(longOpt: 'name', 'Name to say hello to', args: 1, required: true) 
      } 
     def opt = cli.parse(args) 
     if (!opt) return 
     if (opt.h) cli.usage() 
     println "Hello ${opt.n}" 
     } 
} 

После того, что я использую groovy команду, чтобы запустить его из Linux оболочки вроде этого:

[email protected] $ groovy CLI -n Daddy 

Он выводит:

[email protected] $ groovy CLI -n Daddy 
Hello Daddy 

Таким образом, это работает как шарм.

+0

Спасибо за ваше объяснение! Но мне нужно это внутри оболочки Grails, я пытаюсь использовать параметры для некоторого скрипта grails, который я хочу настроить. – Marco

+0

Я не уверен, что вы можете передавать параметры изнутри оболочки Grails – Archer

0

Я сделал поиск Google для site:github.com grailsScript CliBuilder и наткнулся на:

https://github.com/Grails-Plugin-Consortium/grails-cxf/blob/master/scripts/WsdlToJava.groovy

Это дало мне намек, что args переменной должен быть отформатирован. К сожалению, он мутирует -n Howdy в Howdy\n-n (не знаю, почему заказ был перестроен или добавлен символ новой строки).

На приведенной выше странице github есть метод doSplit(), который обрабатывает некоторые из этих данных, но он сохраняет упорядоченный порядок. Лучшее, что я нашел, это удалить пространство между -n и Howdy, которое будет работать с CliBuilder.

Ниже то, что я работаю:

target(main: 'Hello World') { 
    def cli = new CliBuilder() 
    cli.with 
      { 
       h(longOpt: 'help', 'Help - Usage Information') 
       n(longOpt: 'name', 'Name to say hello to', args: 1, required: true) 
      } 
    def ops = doSplit(args) 
    def opt = cli.parse(ops) 
    if (!opt) return 
    if (opt.h) cli.usage() 
    println "Hello ${opt.n}" 
} 

private doSplit(String string){ 
    string.split(/(\n|[ ]|=)/).collect{ it.trim() }.findResults { it && it != '' ? it : null } 
} 

Выполнить это с: helloworld -nHowdy

Смежные вопросы