cobra 是否将当前运行的子命令的名称存储在某处?例如。如果用户使用以下命令启动该工具:
是否可以在程序内部从某个变量或方法确定使用哪个子命令?
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]