将ENV VAR传递给exec.Command?

时间:2016-12-14 01:00:36

标签: go

我正在为一个流行的命令行工具(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字段但是会覆盖所有环境变量。我有大量的配置集,我只想覆盖这个特定的环境变量。这不可能吗??

1 个答案:

答案 0 :(得分:23)

对于那些想要解决方案的人:

    cmd := exec.Command("ansible-playbook", args...)
    cmd.Env = os.Environ()
    cmd.Env = append(cmd.Env, "MY_VAR=some_value")

将保留现有环境,然后写下您想要的一个值。

感谢godoc和开源!!