使用 Thor,我可以只向 CLI 传递一个参数(不是任务)并将其发送到默认方法/任务吗?

Wal*_*iki 5 ruby command-line-interface thor

我正在使用 Thor 为我正在制作的 Ruby gem 创建 CLI。理想情况下,可执行文件将采用类似 的命令myapp path/to/file,从某种意义上说,我宁愿用户不必定义任务,而只需定义一个参数。

我查看了 API,但default_task仅在不存在任务/参数时才有效。

如何让 Thor 将此变量文件参数发送到默认方法/任务,而不是将其解释为不存在的任务?

jda*_*dar 1

myapp 路径/到/文件

两部分答案:

1) myapp...要使用“thor”以外的可执行文件,您需要使用“thor/runner”库。

2)path/to/file可以在initialize方法中完成,如下所示:

class Something < Thor
  def initialize(*args)
    super
    case @path
      when /something$/; self.class.new([@path],options).do_run
    end
  end

  desc 'do_run', "do something"
  argument :path, :banner=>"path/to/file", :optional=>true
  def do_run
    # something
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 哦,另外,做“myapp”的更简单的方法是在顶部“#!/usr/bin/env ruby​​”添加一个shebang行,在底部添加一个“MyApp.start”,这是一个非常方便的方法就是为了这个目的。争论可能有点晦涩,不过 (3认同)