登录
首页 >  Golang >  Go问答

用 Golang 编写一个需要 sudo 密码的 shell 命令

来源:stackoverflow

时间:2024-03-22 22:12:22 373浏览 收藏

在 Go 语言中,想要使用命令行设置日期时间时,使用 `exec.command` 构建的 shell 管道会导致失败。正确的方法是手动指定标准输入读取器,将密码直接输入到 sudo 的标准输入中。例如,代码如下: ```go cmd := exec.Command("sudo", "-S", "--", "cat", "/etc/shadow") cmd.Stdin = strings.NewReader("mysecretpassword") // 将密码直接输入 sudo 的标准输入 ```

问题内容

我想使用一段命令行在 go 中设置日期时间, 但以下代码失败了

datetime := "2021-06-17 18:20:41.8"
sudopassword := "xxxxx"
app := "echo"
arg0 := sudopassword
arg1 := "|sudo -s"
arg2 := "date"
arg3 := "-s"
arg4 := "\"" + datetime + "\""
cmd := exec.command(app, arg0, arg1, arg2, arg3, arg4)

有正确的方法吗?像python一样自动填写密码

os.system('echo %s|sudo -S %s' % (sudoPassword, command))

正确答案


您的代码存在一个问题,即 exec.command 无需包装 shell 即可直接执行命令,但您已经构建了一个 shell 管道。不过,您可以手动指定标准输入读取器以与 sudo 一起使用。

cmd := exec.Command("sudo", "-S", "--", "cat", "/etc/shadow")
    cmd.Stdin = strings.NewReader("mysecretpassword") // your password fed directly to sudo's stdin

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《用 Golang 编写一个需要 sudo 密码的 shell 命令》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>