如何使用 optparse 获取命令行参数?
How to get command line argument using optparse?
我正在开发命令行搜索工具,它使用给定的关键字搜索源文件。我使用 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
的所有支持的情况下做到这一点?
提前致谢。
当您使用 parse!
(与 !
)时,Optparse 会从 ARGV
中删除选项,因此之后任何其他项目(Optparse 无法识别)将位于ARGV[0]
以后。
所以你应该可以这样做:
OptionParser.new do |options|
# as before, but without k option
end.parse!
# At this point all the options optparse knows about will be
# removed from ARGV, so you can get at what's left:
$values[:keyword] = ARGV[0]
我正在开发命令行搜索工具,它使用给定的关键字搜索源文件。我使用 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
的所有支持的情况下做到这一点?
提前致谢。
当您使用 parse!
(与 !
)时,Optparse 会从 ARGV
中删除选项,因此之后任何其他项目(Optparse 无法识别)将位于ARGV[0]
以后。
所以你应该可以这样做:
OptionParser.new do |options|
# as before, but without k option
end.parse!
# At this point all the options optparse knows about will be
# removed from ARGV, so you can get at what's left:
$values[:keyword] = ARGV[0]