在命令行中使 ARGV[0] 可选 Ruby
Make ARGV[0] optional in command line Ruby
我有以下代码:
#!/usr/bin/env ruby
require 'yaml'
require 'json'
require 'getoptlong'
DEFAULT_CONF_FILE = 'conf.yaml'
opts = GetoptLong.new(
[ '--asn', '-a', GetoptLong::OPTIONAL_ARGUMENT ],
[ '--modify', '-m', GetoptLong::OPTIONAL_ARGUMENT ]
)
config_file = ARGV[0]
if config_file.to_s.empty?
config_file = DEFAULT_CONF_FILE
end
opts.each do |opt, arg|
case opt
when '--asn'
write_asn_database(arg,config_file)
when '--modify'
generate_modify_conf_file(arg,config_file)
end
end
此代码根据给定的 YAML 配置文件生成一些 json 文件。我想做的是:
- 如果在命令行中给出了一个conf文件,程序将使用那个给定的文件;
- 如果没有,它将使用默认文件。
类似于:
示例 1(带有配置文件):
$ ./my_script.rb new_conf_file.yaml -a
示例 2(没有配置文件):
$ ./my_script.rb -a
第一个示例有效,第二个示例出现以下错误:
No such file or directory @ rb_sysopen - -a (Errno::ENOENT)
这是有道理的,因为程序假定选项 -a
是一个文件。
我是 Ruby 的新手,我从未使用过命令行 运行 脚本。
从GetoptLong
documentation的第一段开始:
The empty option --
(two minus symbols) is used to end option processing. This can be particularly important if options have optional arguments.
通过调用脚本来使用您的代码:
# ⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓
./my_script.rb -a -- new_conf_file.yaml
此外,应该将 opts
阅读部分 放在 明确处理 ARGV
之前。
不,GetoptLong
无法正确解析您提供的命令行。
好的,我会post在这里。请不要这样做,因为它很难看:
config_file = ARGV[0]
unless File.exist?(config_file)
config_file = DEFAULT_CONF_FILE
end
我有以下代码:
#!/usr/bin/env ruby
require 'yaml'
require 'json'
require 'getoptlong'
DEFAULT_CONF_FILE = 'conf.yaml'
opts = GetoptLong.new(
[ '--asn', '-a', GetoptLong::OPTIONAL_ARGUMENT ],
[ '--modify', '-m', GetoptLong::OPTIONAL_ARGUMENT ]
)
config_file = ARGV[0]
if config_file.to_s.empty?
config_file = DEFAULT_CONF_FILE
end
opts.each do |opt, arg|
case opt
when '--asn'
write_asn_database(arg,config_file)
when '--modify'
generate_modify_conf_file(arg,config_file)
end
end
此代码根据给定的 YAML 配置文件生成一些 json 文件。我想做的是:
- 如果在命令行中给出了一个conf文件,程序将使用那个给定的文件;
- 如果没有,它将使用默认文件。
类似于:
示例 1(带有配置文件):
$ ./my_script.rb new_conf_file.yaml -a
示例 2(没有配置文件):
$ ./my_script.rb -a
第一个示例有效,第二个示例出现以下错误:
No such file or directory @ rb_sysopen - -a (Errno::ENOENT)
这是有道理的,因为程序假定选项 -a
是一个文件。
我是 Ruby 的新手,我从未使用过命令行 运行 脚本。
从GetoptLong
documentation的第一段开始:
The empty option
--
(two minus symbols) is used to end option processing. This can be particularly important if options have optional arguments.
通过调用脚本来使用您的代码:
# ⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓⇓
./my_script.rb -a -- new_conf_file.yaml
此外,应该将 opts
阅读部分 放在 明确处理 ARGV
之前。
不,GetoptLong
无法正确解析您提供的命令行。
好的,我会post在这里。请不要这样做,因为它很难看:
config_file = ARGV[0]
unless File.exist?(config_file)
config_file = DEFAULT_CONF_FILE
end