go exec.Command使用echo >
时间: 2024-02-28 12:54:46 浏览: 105
在 Go 中使用 `exec.Command` 调用系统命令时,可以使用 `>` 符号进行重定向输出。比如使用 `echo` 命令将文本输出到文件中,可以这样写:
```go
cmd := exec.Command("sh", "-c", "echo 'hello' > output.txt")
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
```
这里使用了 `sh` 命令来执行 `echo` 命令,并将输出重定向到 `output.txt` 文件中。在调用 `exec.Command` 时,第一个参数是要执行的命令,后面的参数是命令的参数。使用 `-c` 参数可以指定要执行的命令字符串。如果 `Run` 方法返回的错误不为空,说明命令执行失败,可以根据具体情况进行处理。
相关问题
go中exec.Command执行su加密码命令
在 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命令返回非零退出码,我们还会打印退出码。
阅读全文