go中exec.Command执行su加密码命令
时间: 2024-02-17 16:05:36 浏览: 37
在 Go 中使用 `exec.Command` 执行 `su` 命令需要使用 `sudo` 命令和 `-S` 参数,其中 `-S` 参数表示从标准输入读取密码。以下是一个示例代码:
```go
package main
import (
"fmt"
"os/exec"
)
func main() {
cmd := exec.Command("sudo", "-S", "echo", "hello")
cmd.Stdin = strings.NewReader("password\n") // 输入密码
out, err := cmd.Output()
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(out))
}
```
上述代码中的 `password\n` 需要替换为你的 `su` 密码。这里使用 `echo` 命令来测试 `sudo` 命令是否成功执行。
相关问题
go中exec.Command执行sudo加密码命令
在Go中使用`exec.Command`执行sudo加密码命令需要使用`sudo`命令的`-S`选项和`echo`命令将密码传递给`sudo`命令。以下是一个示例代码:
```go
package main
import (
"fmt"
"os/exec"
"strings"
"syscall"
)
func main() {
// 设置sudo命令和参数
cmd := exec.Command("sudo", "-S", "ls")
// 将密码传递给sudo命令
password := "your_password"
stdin, err := cmd.StdinPipe()
if err != nil {
fmt.Println(err)
return
}
defer stdin.Close()
go func() {
defer stdin.Close()
io.WriteString(stdin, password+"\n")
}()
// 执行sudo命令
output, err := cmd.CombinedOutput()
if err != nil {
if exitErr, ok := err.(*exec.ExitError); ok {
// sudo命令返回非零退出码
if status, ok := exitErr.Sys().(syscall.WaitStatus); ok {
fmt.Printf("sudo command exited with status %d", status.ExitStatus())
}
} else {
fmt.Println(err)
}
return
}
// 打印命令输出结果
fmt.Println(strings.TrimSpace(string(output)))
}
```
在该示例代码中,`exec.Command`函数的第一个参数是要执行的命令名称,第二个参数是要传递给命令的选项和参数。在本例中,我们传递了`sudo`命令和`-S`选项,以及要执行的命令`ls`。
然后,我们使用`cmd.StdinPipe()`函数创建一个用于写入`stdin`的管道,并使用`io.WriteString`函数将密码写入该管道。
最后,我们通过调用`cmd.CombinedOutput()`函数执行sudo命令,并使用`fmt.Println`函数打印输出结果。如果sudo命令返回非零退出码,我们还会打印退出码。
golang exec.command
引用\[1\]和\[2\]提供了两个关于在Golang中使用exec.Command函数执行外部命令的示例代码。
在Golang中,exec.Command函数用于创建一个Cmd结构体,该结构体表示要执行的外部命令。可以通过设置Cmd的属性来指定命令的输入、输出和错误流。然后,可以使用Cmd的Start方法来启动命令的执行,并使用Wait方法等待命令执行完成。
在引用\[1\]的示例中,exec.Command函数用于执行Windows命令行(cmd.exe)。通过设置Cmd的Stdin属性,可以将输入绑定到一个缓冲区,然后可以向缓冲区写入命令。通过设置Cmd的Stdout属性,可以将输出绑定到一个缓冲区,以便获取命令的输出结果。
在引用\[2\]的示例中,exec.Command函数用于执行OpenSSL命令。通过设置Cmd的Stdin、Stdout和Stderr属性,可以分别绑定输入、输出和错误流。通过调用Cmd的Start方法启动命令的执行,并使用管道读取命令的输出和错误信息。
总结来说,通过使用exec.Command函数,可以在Golang中执行外部命令,并获取其输出和错误信息。可以通过设置Cmd的属性来指定命令的输入、输出和错误流。然后,可以使用Cmd的Start方法启动命令的执行,并使用Wait方法等待命令执行完成。
#### 引用[.reference_title]
- *1* [golang执行命令 exec.Command](https://blog.csdn.net/a19352226/article/details/53747323)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [golang exec.Command执行cmd,jar包自定义输入与输出](https://blog.csdn.net/yoorxee/article/details/123323716)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]