dsfsad089111
2019-03-09 00:22
浏览 195

在程序化Shell命令执行中嵌入环境变量

I am in a situation where I am trying to execute a shell command, but have its arguments be interpreted as environment variables properly.

For example, when I type the following into the terminal

ls $GOPATH

Bash interprets and expands the variable $GOPATH, and lists the contents of the $GOPATH directory. I am trying to do a similar thing with Golang's programmatic shell execution.

I have the following code.

package main

import (
    "bytes"
    "fmt"
    "log"
    "os"
    "os/exec"
)

func main() {
    cmd := exec.Command("echo", "$TESTVAR")

    cmd.Env = append(os.Environ(),
        "TESTVAR=this_is_a_test",
    )

    var outBuff bytes.Buffer
    var errBuff bytes.Buffer

    cmd.Stdout = &outBuff
    cmd.Stderr = &errBuff

    if err := cmd.Run(); err != nil {
        log.Fatal(err)
    }

    fmt.Println(outBuff.String()) // empty
    fmt.Println(errBuff.String()) // empty
}

This program outputs

$ go run test.go
$TESTVAR

Does anyone have any idea how to make the exec library interpret $TESTVAR as an environment variable as opposed to a string literal? Thanks in advance!

2条回答 默认 最新

相关推荐 更多相似问题