Golang中隐藏输出后命令是否还会执行?

Golang中隐藏输出后命令是否还会执行? 我有一个奇怪的问题 -_-

实际上,我想执行 Linux 命令 chattr,例如 chattr -i myfunc

如果我写 _, _ = exec.Command("chattr", "-i", "myfunc").Output(),那么这个命令会执行吗?

2 回复

即使不显示其输出,命令仍会执行。

更多关于Golang中隐藏输出后命令是否还会执行?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


是的,命令会执行。即使你忽略了输出结果,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() 方法,命令就会被执行,无论你是否捕获返回值。

回到顶部