2 回答

TA贡献1789条经验 获得超10个赞
代替
cmd := exec.Command("echo", "$TESTVAR")
和
cmd := exec.Command("sh", "-c", "echo $TESTVAR")

TA贡献1839条经验 获得超15个赞
Bash 和其他 shell 解释和扩展变量,但应用程序不执行 Bash。
应用程序正在执行 echo 命令。与大多数其他命令一样,echo 命令不会在其参数中扩展环境变量。
您可以按照另一个答案中所示运行 Bash,也可以自行扩展环境变量。以下是使用os.Expand函数执行此操作的方法:
func newCommandEnv(env []string, cmd string, args ...string) *exec.Cmd {
m := map[string]string{}
for _, e := range env {
if i := strings.Index(e, "="); i >= 0 {
m[e[:i]] = e[i+1:]
}
}
fn := func(placeholder string) string {
return m[placeholder]
}
for i, a := range args {
args[i] = os.Expand(a, fn)
}
fmt.Println(args)
c := exec.Command(cmd, args...)
c.Env = env
return c
}
- 2 回答
- 0 关注
- 229 浏览
添加回答
举报