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 關注
- 210 瀏覽
添加回答
舉報