我提供了带有几个命令和子命令的命令行工具,我使用了cobra命令行,并且我有两个 单独的命令 ,第一个是其他 命令的 先决条件
例如,第一个命令是通过创建临时文件夹并验证某些文件来选择环境
第二个命令应该从第一个命令获得一些属性
用户应该像这样执行它
btr准备 btr运行
当run command执行时,它应该从prepare命令结果中获取一些数据
run command
prepare
// rootCmd represents the base command when called without any subcommands var rootCmd = &cobra.Command{ Use: "btr", Short: "piping process", } var prepare = &cobra.Command{ Use: "pre", Short: "Prepare The environment" , Run: func(cmd *cobra.Command, args []string) { //This creating the temp folder and validate some configuration file tmpFolderPath,parsedFile := exe.PreProcess() }, } var initProcess = &cobra.Command{ Use: “run”, Short: “run process”, Run: func(cmd *cobra.Command, args []string) { //Here I need those two properties run(tmpFolderPath, ParsedFile) }, } func init() { rootCmd.AddCommand(prepare,initProcess) }
更新
好吧,下面的答案并没有真正的帮助。我需要在 本地和云环境中的 两个命令之间共享状态,如果我从shell脚本运行命令行命令来调用1命令,然后再调用第二个需要从状态中获取一些状态的命令,该如何做呢?第一条命令,我需要 在我的上下文中具有代码示例的 端到端 解决方案
更新2
假设我了解我需要配置文件(json),
我应该在哪里创建它(路径)? 什么时候清洗? 如果我使用1file,我应该如何验证存储与特定过程有关的数据,并在需要时获取其他过程数据(guid)?
我应该在哪里创建它(路径)?
什么时候清洗?
如果我使用1file,我应该如何验证存储与特定过程有关的数据,并在需要时获取其他过程数据(guid)?
可以说我已经配置如下
type config struct{ path string, wd string, id string,//guid? }
就像评论中所说的那样,如果您需要跨命令共享数据,则需要将其持久化。您使用的结构无关紧要,但是为了简单起见,由于JSON是当前用于数据交换的最扩展的语言,我们将使用它。
我的建议是使用用户的住所。许多应用程序在此处保存其配置。这样可以轻松实现多环境解决方案。假设您的配置文件将命名为 myApp 。
func configPath() string { cfgFile := ".myApp" usr, _ := user.Current() return path.Join(usr.HomeDir, cfgFile) }
那显然取决于您的要求。但是,如果你经常需要运行pre,并run按照这个顺序,我敢打赌,你可以以后inmediately清理run执行,当它不会再需要。
pre
run
这很简单。如果您需要保存的是您的config结构,则可以执行以下操作:
config
func saveConfig(c config) { jsonC, _ := json.Marshal(c) ioutil.WriteFile(configPath(), jsonC, os.ModeAppend) }
func readConfig() config { data, _ := ioutil.ReadFile(configPath()) var cfg config json.Unmarshal(data, &cfg) return cfg }
// pre command // persist to file the data you need saveConfig(config{ id: "id", path: "path", wd: "wd", }) // run command // retrieve the previously stored information cfg := readConfig() // from now you can use the data generated by `pre`
免责声明 :我已简短删除了所有错误处理。