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 关注
- 115 浏览
添加回答
举报