Go 是否将环境变量传递给exec.Command?

Go 是否将环境变量传递给exec.Command?,go,Go,我正在为一个流行的命令行工具(ansible playbook)编写一个go包装器,我需要通过exec.command调用传递一个参数。bash的等价物是: MY_VAR=some_value ansible-playbook -i custom-inventory playbook.yml 以前我只是使用os.Setenv导出我的_VAR,但这会导致playbook的并行执行出现问题。所以我想在命令前面传递var,这样每个调用都有它自己的值 我真的不知道如何使用exec.Command实现这

我正在为一个流行的命令行工具(ansible playbook)编写一个go包装器,我需要通过exec.command调用传递一个参数。bash的等价物是:

MY_VAR=some_value ansible-playbook -i custom-inventory playbook.yml
以前我只是使用os.Setenv导出我的_VAR,但这会导致playbook的并行执行出现问题。所以我想在命令前面传递var,这样每个调用都有它自己的值

我真的不知道如何使用exec.Command实现这一点,因为该函数的第一个参数是“Command”。有什么建议吗


编辑:我尝试过使用Cmd结构的Env字段,但它会覆盖所有环境变量。我有大量的配置集,我只想覆盖这个特定的环境变量。这不可能吗???

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

    cmd := exec.Command("ansible-playbook", args...)
    cmd.Env = os.Environ()
    cmd.Env = append(cmd.Env, "MY_VAR=some_value")
将保留现有环境,然后写入所需的一个值


谢天谢地,godoc和开源

请注意,这将覆盖当前进程环境中已存在的任何
MY_VAR
。如果这是您的意图,那么此解决方案可以正常工作。否则,您可能希望将
append()
行括在类似
If,ok:=os.LookupEnv(“MY_VAR”);的内容中!好的{…}
就我个人而言,我会复制os.Environ切片,而不是在没有深度复制的情况下追加。也许它现在可以工作,但我不喜欢通过不同的名称附加到同一个切片上。我不认为这是真的,os.Environ()会返回一个新切片。这应该是安全的