首页 > 后端开发 > Golang > 为什么在 Go 中运行 `sudo` 命令时 `exec.Command()` 返回退出状态 1?

为什么在 Go 中运行 `sudo` 命令时 `exec.Command()` 返回退出状态 1?

Patricia Arquette
发布: 2024-11-27 13:45:10
原创
662 人浏览过

Why Does `exec.Command()` Return Exit Status 1 When Running `sudo` Commands in Go?

Go 中的 Os Exec Sudo 命令

背景

在探索 Go 和 goroutine 时,用户执行命令时可能会遇到困难格式:

sudo find /folder -type f | while read i; do sudo -S chmod 644 "$i"; done
登录后复制

问题

  • 为什么命令返回“退出状态1”?
  • 如何获取更详细的信息错误消息?

回答

  • 退出状态1的原因: exec.Command()函数执行指定的程序直接地。但是,给定的命令涉及通过 shell 脚本连接的多个程序。要执行 shell 脚本,请使用以下语法:
cmd := exec.Command("/bin/sh", "-c", "sudo find ...")
登录后复制
  • 详细错误消息: 通过直接在终端中运行命令来获取更详细的错误消息。如果失败,请检查终端输出中是否有任何错误消息。

代码修改

以下是修改后的代码:

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    cmd := exec.Command("/bin/sh", "-c", "sudo find /folder -type f | while read i; do sudo -S chmod 644 \"\"; done")
    out, err := cmd.CombinedOutput()
    if err != nil {
        fmt.Printf("Error: %s\nOutput: %s", err, out)
    }
}
登录后复制

以上是为什么在 Go 中运行 `sudo` 命令时 `exec.Command()` 返回退出状态 1?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板