2 回答
TA貢獻1773條經驗 獲得超3個贊
exec.Command()不在 shell 內運行,它只運行命令。這對您來說意味著它不會擴展環境變量 (?$HOME) 或執行重定向 (?>,?>>),因為這是 shell 的工作。
exec.Command()除非絕對必要,否則我不建議在內部運行 shell ,因為所需的不受信任輸入的引用可能很棘手,并且很可能出現錯誤(包括安全問題)。
您可以使用os.ExpandEnv()或os.GetEnv()來加載環境變量。您可以通過讀取輸出然后將其寫入所需的文件來進行重定向,例如使用ioutil.WriteFile().
把它們放在一起看起來像(未經測試):
// 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貢獻1921條經驗 獲得超9個贊
間接是 shell 的一項功能。如果您想使用間接,您有以下兩種選擇之一:
通過 shell 運行它。
getSystemKernel := exec.Command("/bin/sh", "-c", "uname -s >> home/username/system.txt")使用該
os/exec包,并自己處理程序的輸出流。
- 2 回答
- 0 關注
- 217 瀏覽
添加回答
舉報
