0

トールを使用して CLI アプリを作成しています。うまくいっていますが、今はサブコマンド機能で立ち往生しています。

その github wiki には何もありませんし、ググっても何も役に立ちません。

それで、誰かがサブコマンド機能を実装する方法を示したり指摘したりできますか?

4

2 に答える 2

3

チェックアウト: http://whatistor.com/

そのサイトから(スペースを節約し、サブコマンドの使用法を強調するために少し編集しました):

モジュール GitCLI
  class Remote ", "リポジトリの名前を付けたリモートを追加します"
    オプション :t, :banner => ""
    オプション :m, :banner => ""
    オプション :f => :boolean、:tags => :boolean、:mirror => :string
    def add(名前、URL)
      # git remote add を実装
    終わり

    desc "rename ", "リモートの名前を次の名前に変更"
    def rename(古い、新しい)
    終わり
  終わり

  class Git [...]", "別のリポジトリからオブジェクトと参照をダウンロード"
    オプション :all => :boolean、:multiple => :boolean
    オプション :append, :type => :boolean, :aliases => :a
    def fetch(リポジトリ、*refspec)
      # ここに git fetch を実装
    終わり

    desc "remote SUBCOMMAND ...ARGS", "追跡されたリポジトリのセットを管理する"
    subcommand "remote", Remote ### ここで使用されるサブコマンド...
  終わり
終わり

h番目...

于 2013-05-14T23:28:21.197 に答える
2

次のようなことを試してください (ファイル test.rb):

#!/usr/bin/env ruby

require 'rubygems'
require 'thor'
require 'thor/group'  # This is required -- it's not a bug, it's a feature!

class Bar < Thor
  desc "baz", "Whatever"
  def baz
    puts "Hello from Bar"
  end
end

class Foo < Thor
  desc "go", "Do something"
  def go
    puts "Hello there!"
  end

  register Bar, :bar, "bar", "Do something else"
end

if __FILE__ == $0
  Foo.start
end

これは次のように動作します。

> test.rb
Tasks:
  test.rb bar          # Do something else
  test.rb go           # Do something
  test.rb help [TASK]  # Describe available tasks or one specific task

> test.rb go
Hello there!
> test.rb bar
Tasks:
  test.rb baz             # Whatever
  test.rb help [COMMAND]  # Describe subcommands or one specific subcommand

> test.rb bar baz
Hello from Bar
> test.rb baz
Could not find task "baz".
>

(これはほとんど期待どおりに機能しますが、「test.rb bar」のヘルプ情報が正しくないことを除けば、私見です。「test.rb baz . ..".)

お役に立てれば!

于 2011-06-18T15:32:18.653 に答える