Thor可执行文件 – 忽略任务名称
thor wiki页面, Making a Exectable ,向您展示如何创建一个类似于以下内容的Thor驱动的CLI命令:
bash ./mythorcommand foo
这要求您传入thor任务foo作为第一个参数。
我还可以使用thor的default_method运行一个没有任何参数的thor可执行文件:
bash ./mythorcommand
但是,我想传入一个变量字符串作为第一个参数:
bash ./mythorcommand "somevalue"
这不起作用,因为thor命令期望第一个参数是任务名称。 有没有办法忽略任务名称并将第一个参数发送到默认方法?
如果此function不存在,我认为添加一个将所有命令行参数传递到一个任务/方法的方法非常有用:
class MyThorCommand < Thor only_method :default def default(*args) puts args.inpsect end end MyThorCommand.start
你应该从Thor :: Group和那个call start方法扩展
class Test < Thor::Group desc "Act description" def act puts "do smth" end end Test.start
我找到了一个相当“奇怪”的解决方案来解决这个问题。
您向Thor添加默认任务。 比你添加method_missing,以便你可以欺骗Thor将默认方法作为参数传递,如果你的应用程序有参数。
从您的示例中可以看出,解决方案如下所示:
class MyThorCommand < Thor default_task :my_default desc "my_default", "A simple default" def my_default(*args) puts args.inspect end def method_missing(method, *args) args = ["my_default", method.to_s] + args MyThorCommand.start(args) end end MyThorCommand.start(ARGV)
如果这是在文件“my_thor.rb”中,执行“ruby my_thor.rb foo bar”将显示'[“foo”,“bar”]'作为结果。
希望能帮助到你。
虽然这并不能完全解决您的问题,但是一种替代方法可能是使用Thor.map
通过仅提供选项标志来调用命令:
map '-F' => 'foo'
现在您也可以传递参数
mythorcommand -F bar # => invokes foo("bar")