Golang中隐藏输出后命令是否还会执行?
Golang中隐藏输出后命令是否还会执行? 我有一个奇怪的问题 -_-
实际上,我想执行 Linux 命令 chattr,例如 chattr -i myfunc。
如果我写 _, _ = exec.Command("chattr", "-i", "myfunc").Output(),那么这个命令会执行吗?
2 回复
是的,命令会执行。即使你忽略了输出结果,exec.Command().Output() 方法仍然会执行命令。
Output() 方法会运行命令并收集其标准输出(stdout)。当你使用 _, _ 忽略返回值时,你只是丢弃了命令的输出和错误信息,但命令本身已经被执行了。
示例代码:
package main
import (
"os/exec"
)
func main() {
// 命令会被执行,即使输出被忽略
_, _ = exec.Command("chattr", "-i", "myfunc").Output()
// 更清晰的写法是检查错误
// if err := exec.Command("chattr", "-i", "myfunc").Run(); err != nil {
// // 处理错误
// }
}
如果你只是想执行命令而不需要捕获输出,可以使用 Run() 方法:
err := exec.Command("chattr", "-i", "myfunc").Run()
if err != nil {
// 处理执行错误
}
或者使用 Start() 和 Wait() 来异步执行:
cmd := exec.Command("chattr", "-i", "myfunc")
err := cmd.Start()
if err != nil {
// 处理启动错误
}
err = cmd.Wait() // 等待命令完成
if err != nil {
// 处理执行错误
}
关键点:在 Go 的 exec 包中,只要调用了 Run()、Output() 或 CombinedOutput() 方法,命令就会被执行,无论你是否捕获返回值。

