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!