我正在为一个流行的命令行工具(ansible-playbook)编写一个go包装器,我需要通过exec.Command调用传递一个参数。 bash等价物是:
MY_VAR=some_value ansible-playbook -i custom-inventory playbook.yml
以前我只是使用os.Setenv导出MY_VAR,但这会导致并行执行剧本的问题。所以我想在命令前面传递var,这样每个调用都有它自己的var值。
我不确定如何使用exec.Command执行此操作,因为该函数的第一个参数是“command”。有什么提示吗?
编辑:我已经尝试使用Cmd结构的Env字段但是会覆盖所有环境变量。我有大量的配置集,我只想覆盖这个特定的环境变量。这不可能吗??
答案 0 :(得分:23)
对于那些想要解决方案的人:
cmd := exec.Command("ansible-playbook", args...)
cmd.Env = os.Environ()
cmd.Env = append(cmd.Env, "MY_VAR=some_value")
将保留现有环境,然后写下您想要的一个值。
感谢godoc和开源!!