首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Thor可执行-忽略任务名称

Thor可执行-忽略任务名称
EN

Stack Overflow用户
提问于 2011-09-01 23:05:17
回答 3查看 1.3K关注 0票数 12

thor wiki页面制造一个可扩展的向您展示了如何创建一个thor驱动的CLI命令,如下所示:

bash ./mythorcommand foo

这要求您将thor任务foo作为第一个参数传递。

我还可以使用thor的default_method运行不带任何参数的thor可执行文件

bash ./mythorcommand

但是,我希望传入一个变量字符串作为第一个参数:

bash ./mythorcommand "somevalue"

这不起作用,因为thor命令期望第一个参数是任务名。是否有一种方法可以忽略任务名称并将第一个参数发送到默认方法?

如果这个功能不存在,我认为添加一个将所有命令行参数传递到一个任务/方法中的方法是非常有用的:

代码语言:javascript
复制
class MyThorCommand < Thor
  only_method :default

  def default(*args)
    puts args.inpsect
  end 
end 

MyThorCommand.start
EN

回答 3

Stack Overflow用户

发布于 2011-12-02 20:34:47

您应该从Thor::Group和那个调用开始方法中扩展

代码语言:javascript
复制
class Test < Thor::Group
  desc "Act description"
  def act
    puts "do smth"
  end
end

Test.start
票数 4
EN

Stack Overflow用户

发布于 2014-05-30 13:38:28

对于这个问题,我找到了一个相当“奇怪”的解决方案,对我来说效果很好。

向Thor添加默认任务。而不是添加method_missing,以便在应用程序中存在参数时,可以将Thor作为参数传递给默认方法。

从您的例子来看,解决方案如下所示:

代码语言:javascript
复制
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”。

希望能帮上忙。

票数 3
EN

Stack Overflow用户

发布于 2011-09-05 17:57:08

虽然这并不能完全解决您的问题,但可以使用Thor.map调用命令,只提供一个选项标志:

代码语言:javascript
复制
map '-F' => 'foo'

现在您还可以传递参数。

代码语言:javascript
复制
mythorcommand -F bar # => invokes foo("bar")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7277604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档