亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在程序化 shell 命令執行中嵌入環境變量

在程序化 shell 命令執行中嵌入環境變量

Go
ibeautiful 2023-06-12 16:58:38
我正處于嘗試執行 shell 命令的情況,但它的參數被正確解釋為環境變量。例如,當我在終端中輸入以下內容時ls $GOPATHBash 解釋并擴展變量$GOPATH,并列出目錄的內容$GOPATH。我正在嘗試對 Golang 的程序化 shell 執行做類似的事情。我有以下代碼。package mainimport (    "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}這個程序輸出$ go run test.go$TESTVAR有誰知道如何使 exec 庫將 $TESTVAR 解釋為環境變量而不是字符串文字?提前致謝!
查看完整描述

2 回答

?
至尊寶的傳說

TA貢獻1789條經驗 獲得超10個贊

代替

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

cmd := exec.Command("sh", "-c", "echo $TESTVAR")


查看完整回答
反對 回復 2023-06-12
?
紫衣仙女

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

}


查看完整回答
反對 回復 2023-06-12
  • 2 回答
  • 0 關注
  • 210 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號