我试图让ruby gem 'slop'接受通过shell glob提供的文件列表。因此,在一个包含文件foo_1,foo_2,foo_3的目录中,我想传递my_prog -f foo*,并让选项数组包含三个文件名作为三个单独的元素。
require 'slop'
opts = Slop.parse do |o|
o.array '-f', '--files', 'List of files', delimiter: ' '
end
files = opts[:files]
puts "Files to process: #{files}"
myprog.rb -f foo_* ==> Files to process: ["foo_1"]
有什么方法可以做到这一点吗?我宁愿不放弃Slop,我已经很高兴地在其他论点中使用它了。
2条答案
按热度按时间0aydgbwb1#
所以当你把参数传入ruby脚本时,它们会被解析为
ARGV
数组。slop
解析器不理解foo_2
和foo_3
是-f
标志的一部分,因此被忽略尽管如此,
slop
解析器将使用这个["-f", "foo_1 foo_2 foo_3"]
(但ARGV
不是这样构造的)这里我看到的唯一解决方案是重写他们的解析器
qjp7pelc2#
原来,在污水处理完成后,命令行上的剩余参数在opts. arguments中可用。因此,一种方法是删除'-f'参数,并将保留在opts.arguments中的参数作为文件列表。就指定用户界面而言,这是一种非常合理的方式。许多unix命令都是这样工作的。(只是在命令末尾列出要处理的文件。)ls和grep是两个例子。