Golang cobra CLI - 获取当前正在运行的子命令

问题描述 投票:0回答:1

cobra 是否将当前运行的子命令的名称存储在某处?例如。如果用户使用以下命令启动该工具:

  • 工具子命令-flag1 -flag2等
  • 工具 -globalflag1 子命令 -flag1 -flag2

是否可以在程序内部从某个变量或方法确定使用哪个子命令?

go command-line-interface go-cobra
1个回答
0
投票

cobra Command 结构体提供了一些方法来访问当前正在运行的命令:

var RootCmd = &cobra.Command{
    ...
    PersistentPreRun: func(cmd *cobra.Command, args []string) {
        fmt.Println("Executing:", cmd.CommandPath())
        fmt.Println("Executing:", cmd.CalledAs())
        fmt.Println("Executing:", cmd.CalledAs(), Args)
    },
}

假设注册了一个子命令

subcmd
和一个参数
myarg
,执行
mycli subcmd myarg
返回:

Executing: mycli subcmd
Executing: subcmd
Executing: subcmd [myarg]

并且,正如您的评论中提到的,您可以通过空格分割来获取命令路径的特定部分:

strings.Fields(cmd.CommandPath())[1]
© www.soinside.com 2019 - 2024. All rights reserved.