运行 特定版本的 ruby 脚本(如果输入命令行参数)
run specific version of ruby script if command line argument is entered
我已经通读了我的问题的大量变体,但我似乎找不到真正与我正在尝试做的事情相匹配的一个。
我有一个基本上有两个版本的脚本:"default" 将通过一系列强制方法 运行,第二个版本将通过这些相同的方法 运行,然后附加一系列辅助方法。我希望第二个版本是从命令行触发的(类似于 $ script.rb second_version
),而 "default" 选项完全不需要输入参数来触发(因为它会被更频繁地使用,所以只是 $ script.rb
).
我用 ARGV 试过这个:
second_version = ARGV[0]
if second_version
second_version_methods
else
main_version
end
这在技术上可行,但问题是 main_version 脚本中 运行 的第一个方法是需要用户输入的方法。最终发生的是字符串 "second_version" 作为值自动传递给该方法,这是我不想要的。
本质上,有没有办法让命令行参数 仅 以特定方式指定 运行 的条件,然后一旦完成,它只是丢弃输入?我研究过 optparse 但它的功能似乎有点多余。
谢谢!
ARGV
不是只读的,因此您可以像这样使用第一个输入:
if ARGV[0] == 'second_version'
ARGV.shift # removes the first element
second_version_methods
else
main_version
end
如果你想保持 ARGV 完好无损(这是一个更好的主意),你可以这样做:
arguments = ARGV.dup
if arguments[0] == 'second_thing'
arguments.shift
# ...
我已经通读了我的问题的大量变体,但我似乎找不到真正与我正在尝试做的事情相匹配的一个。
我有一个基本上有两个版本的脚本:"default" 将通过一系列强制方法 运行,第二个版本将通过这些相同的方法 运行,然后附加一系列辅助方法。我希望第二个版本是从命令行触发的(类似于 $ script.rb second_version
),而 "default" 选项完全不需要输入参数来触发(因为它会被更频繁地使用,所以只是 $ script.rb
).
我用 ARGV 试过这个:
second_version = ARGV[0]
if second_version
second_version_methods
else
main_version
end
这在技术上可行,但问题是 main_version 脚本中 运行 的第一个方法是需要用户输入的方法。最终发生的是字符串 "second_version" 作为值自动传递给该方法,这是我不想要的。
本质上,有没有办法让命令行参数 仅 以特定方式指定 运行 的条件,然后一旦完成,它只是丢弃输入?我研究过 optparse 但它的功能似乎有点多余。
谢谢!
ARGV
不是只读的,因此您可以像这样使用第一个输入:
if ARGV[0] == 'second_version'
ARGV.shift # removes the first element
second_version_methods
else
main_version
end
如果你想保持 ARGV 完好无损(这是一个更好的主意),你可以这样做:
arguments = ARGV.dup
if arguments[0] == 'second_thing'
arguments.shift
# ...