You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thor 1.2.1三级子命令帮助信息显示异常问题求助

Thor 1.2.1三级子命令帮助信息父命令缺失问题

结论

这是Thor 1.2.1的已知bug,并非你的操作有误。在三级及更深层级的子命令帮助输出中,中间父命令会被遗漏,导致命令路径显示不完整。

问题复现

你的代码完全遵循Thor子命令的定义规范:

#! /usr/bin/env ruby

require "thor"

module SubCommand2
  class Cli < Thor
    desc "hello NAME", "say hello to NAME"
    def hello(name)
      puts "Hello #{name}"
    end
  end
end

module SubCommand1
  class Cli < Thor
    desc "hello NAME", "say hello to NAME"
    def hello(name)
      puts "Hello #{name}"
    end

    desc "subcommand2 [COMMAND]", "SubCommand2 Project Commands"
    long_desc "SubCommand2 Commands"
    subcommand "subcommand2", SubCommand2::Cli
  end
end

module Demo
  class Cli < Thor
    desc "hello NAME", "say hello to NAME"
    def hello(name)
      puts "Hello #{name}"
    end

    desc "subcommand1 [COMMAND]", "SubCommand1 Project Commands"
    long_desc "SubCommand1 Commands"
    subcommand "subcommand1", SubCommand1::Cli
  end
end

Demo::Cli.start(ARGV)

执行命令 ./demo subcommand1 subcommand2 后,实际输出的帮助信息丢失了中间层级subcommand1:

#> ./demo subcommand1 subcommand2
Commands:
  demo subcommand2 hello NAME      # say hello to NAME
  demo subcommand2 help [COMMAND]  # Describe subcommands or one specific subcommand

而期望的正确输出应包含完整的命令路径:

#> ./demo subcommand1 subcommand2
Commands:
  demo subcommand1 subcommand2 hello NAME      # say hello to NAME
  demo subcommand1 subcommand2 help [COMMAND]  # Describe subcommands or one specific subcommand

问题原因

Thor 1.2.1在生成嵌套子命令的帮助信息时,命令路径的拼接逻辑存在缺陷,仅保留了根命令和当前直接子命令的名称,没有递归拼接所有父级子命令的名称,导致中间层级丢失。

解决方案

  1. 升级Thor版本:该问题在Thor 1.3.0及后续版本中已被修复,执行以下命令升级即可解决:
    gem update thor
    
  2. 临时兼容方案(无法升级时):通过重写子命令类的banner方法,手动拼接完整命令路径。例如在SubCommand2::Cli中添加:
    def self.banner(command, _namespace = nil, _subcommand = false)
      full_path = "#{Demo::Cli.banner_base} subcommand1 subcommand2 #{command.name}"
      full_path.gsub(/\s+/, ' ')
    end
    
    注意这种方式需要为每个深层子命令单独适配,通用性有限,建议优先选择版本升级。

内容的提问来源于stack exchange,提问作者QOps1981

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 14:02:27