Ben*_*aum 14 ruby rake command-line-interface rakefile
我有以下Rakefile:
task :test_commas, :arg1 do |t, args|
puts args[:arg1]
end
Run Code Online (Sandbox Code Playgroud)
并希望使用包含逗号的单个字符串参数来调用它.这是我得到的:
%rake 'test_commas[foo, bar]'
foo
%rake 'test_commas["foo, bar"]'
"foo
%rake "test_commas['foo, bar']"
'foo
%rake "test_commas['foo,bar']"
'foo
%rake "test_commas[foo\,bar]"
foo\
Run Code Online (Sandbox Code Playgroud)
改变耙子是一个非常脏的修复.请尝试使用OptionParser.语法如下
$ rake mytask -- -s 'some,comma,sepparated,string'
Run Code Online (Sandbox Code Playgroud)
将--要跳过解析参数的耙路
这是红宝石代码:
task :mytask do
options = {}
optparse = OptionParser.new do |opts|
opts.on('-s', '--string ARG', 'desc of my argument') do |str|
options[:str] = str
end
opts.on('-h', '--help', 'Display this screen') do
puts opts
exit
end
end
begin
optparse.parse!
mandatory = [:str]
missing = mandatory.select{ |param| options[param].nil? }
if not missing.empty?
puts "Missing options: #{missing.join(', ')}"
puts optparse
exit
end
rescue OptionParser::InvalidOption, OptionParser::MissingArgument
puts $!.to_s
puts optparse
exit
end
puts "Performing task with options: #{options.inspect}"
# @TODO add task's code
end
Run Code Online (Sandbox Code Playgroud)
我不确定这是可能的.看一下lib/rake/application.rb,解析任务字符串的方法是:
def parse_task_string(string)
if string =~ /^([^\[]+)(\[(.*)\])$/
name = $1
args = $3.split(/\s*,\s*/)
else
name = string
args = []
end
[name, args]
end
Run Code Online (Sandbox Code Playgroud)
看来参数字符串是用逗号分隔的,所以你不能有一个包含逗号的参数,至少在当前的rake-0.9.2中没有.
| 归档时间: |
|
| 查看次数: |
4310 次 |
| 最近记录: |