0

我创建了一个非常简单的脚本,并希望将参数传递给脚本。

喜欢:

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 

脚本中 args 的值是:Howdy -n

我在这里错过了什么做错了?有什么建议么?

4

2 回答 2

1

您的问题是您正在通过grailsshell 运行代码。我已将您的代码转换为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 shell 运行它:

 archer@capitan $ groovy CLI -n Daddy

它输出:

 archer@capitan $ groovy CLI -n Daddy
 Hello Daddy

所以它就像一个魅力。

于 2013-01-12T13:20:11.483 回答
0

我做了一个谷歌搜索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()方法可以处理其中的一些问题,但它保持了重新排列的顺序。我发现最好的办法是删除 and 之间的空格-nHowdy这将与 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

于 2014-10-28T19:43:18.377 回答