如何让Ruby gem 'slop'在shell glob之后返回一个文件名数组

uinbv5nw  于 2023-04-05  发布在  Ruby
关注(0)|答案(2)|浏览(104)

我试图让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,我已经很高兴地在其他论点中使用它了。

0aydgbwb

0aydgbwb1#

所以当你把参数传入ruby脚本时,它们会被解析为ARGV数组。

# myprog.rb -f foo_*

ARGV # => ["-f", "foo_1", "foo_2", "foo_3"]

slop解析器不理解foo_2foo_3-f标志的一部分,因此被忽略
尽管如此,slop解析器将使用这个["-f", "foo_1 foo_2 foo_3"](但ARGV不是这样构造的)

这里我看到的唯一解决方案是重写他们的解析器

qjp7pelc

qjp7pelc2#

原来,在污水处理完成后,命令行上的剩余参数在opts. arguments中可用。因此,一种方法是删除'-f'参数,并将保留在opts.arguments中的参数作为文件列表。就指定用户界面而言,这是一种非常合理的方式。许多unix命令都是这样工作的。(只是在命令末尾列出要处理的文件。)ls和grep是两个例子。

相关问题