2 回答

TA貢獻(xiàn)1773條經(jīng)驗 獲得超3個贊
exec.Command()
不在 shell 內(nèi)運行,它只運行命令。這對您來說意味著它不會擴展環(huán)境變量 (?$HOME
) 或執(zhí)行重定向 (?>
,?>>
),因為這是 shell 的工作。
exec.Command()
除非絕對必要,否則我不建議在內(nèi)部運行 shell ,因為所需的不受信任輸入的引用可能很棘手,并且很可能出現(xiàn)錯誤(包括安全問題)。
您可以使用os.ExpandEnv()
或os.GetEnv()
來加載環(huán)境變量。您可以通過讀取輸出然后將其寫入所需的文件來進(jìn)行重定向,例如使用ioutil.WriteFile()
.
把它們放在一起看起來像(未經(jīng)測試):
// Expand the $HOME variable.
systemInfoLoc := os.ExpandEnv("$HOME/systemvar.txt")
// Run uname command and get both stdout and stderr
getSystemKernel, err := exec.Command("uname", "-s").CombinedOutput()
if err != nil {
? ? // Show error and output
? ? log.Fatalf("%s: %s", err, getSystemKernel)
}
// Write result to file
err = ioutil.WriteFile("home/username/system.txt", getSystemKernel, 0644)
if err != nil {
? ? log.Fatal(err)
}

TA貢獻(xiàn)1921條經(jīng)驗 獲得超9個贊
間接是 shell 的一項功能。如果您想使用間接,您有以下兩種選擇之一:
通過 shell 運行它。
getSystemKernel := exec.Command("/bin/sh", "-c", "uname -s >> home/username/system.txt")
使用該
os/exec
包,并自己處理程序的輸出流。
- 2 回答
- 0 關(guān)注
- 196 瀏覽
添加回答
舉報