如何使用optparse获取命令行参数?

时间:2015-04-28 15:09:21

标签: ruby command-line

我正在使用命令行搜索工具,该工具使用给定的关键字搜索源文件。我使用optparse来解析命令行选项。现在它看起来像这样:

qs -p ~/Desktop/project -k line

如果没有提供-p参数,我使用默认(当前)目录:

qs -k line

但是,我真正想要的是和上面一样但没有-k,就像这样:

qs line

现在我有了这个:

OptionParser.new do |options|

  options.banner = "Usage: qs [options] [path] [keyword]\n" \
                   "\nSearch through files for a given keyword at specified path.\n" \
                   "If path is no specified current directory used by default."

  options.separator ""
  options.separator "Specific options:"

  options.on("--no-rec", "Looking in files only at that level.") do |r|
    $values[:recursion] = r
  end

  options.on('-p', '--path PATH', String, 'Path where to start search') do |path|
    $values[:path] = path
  end

  options.on('-k', '--key WORD', String, 'Word you are looking for ') do |key|
    $values[:keyword] = key
  end    

  options.on_tail("-h" , "--help", "Help documentation.") do
    $stderr.puts options
    exit 1
  end
end.parse!

正如你所看到的,不可能做到这样的事情:

$values[:keyword] = ARGV[2]

因为无法保证所有参数都存在。

是否可以执行此操作,而不会失去optparse的所有支持?

提前致谢。

1 个答案:

答案 0 :(得分:1)

当您使用parse!(使用!)时,Optparse会从ARGV中删除选项,因此之后任何其他项目(Optparse无法识别)将位于{{ 1}}以后。

所以你应该可以这样做:

ARGV[0]