Это можно сделать, если вы установите для свойства stopAtNonOption
значение false, чтобы синтаксический разбор не останавливался на CommandName
. Затем вы можете получить команду от CliBuilder
options. Ниже приведен крошечный пример:
def test(args) {
def cli = new CliBuilder(usage: 'testOptions.groovy [command] -r -u', stopAtNonOption: false)
cli.with {
r longOpt: 'reverse', 'Reverse command'
u longOpt: 'upper', 'Uppercase command'
}
def options = cli.parse(args)
def otherArguments = options.arguments()
def command = otherArguments ? otherArguments[0] : 'defaultCommand'
def result = command
if (options.r) {
result = result.reverse()
}
if (options.u) {
result = result.toUpperCase()
}
result
}
assert 'myCommand' == test(['myCommand'])
assert 'MYCOMMAND' == test(['myCommand', '-u'])
assert 'dnammoCym' == test(['myCommand', '-r'])
assert 'DNAMMOCYM' == test(['myCommand', '-r', '-u'])
assert 'defaultCommand' == test([])
Groovy использует apache-cli, поэтому у него может не быть такой возможности. См. Http://stackoverflow.com/questions/7739214/command-line-parser-and-lack-of-subcommand-and-grouping, если вы открыты для использования некоторых других библиотек (jcommander, args4j) – Jayan
@Jayan Спасибо. Я хотел, чтобы скрипт исполнялся из CMD-линии OSX, используя '#!/Usr/bin/env groovy', поэтому я работал с CliBuilder. –