Golang中的Echo命令

时间:2016-10-17 15:31:29

标签: go echo

我目前正在尝试在Linux上的Golang中执行简单的echo命令。我的代码如下:

cmd = exec.Command("echo", "\"foo 0x50\"", ">", "test.txt")

_, err = cmd.Output()

if err != nil {
    fmt.Println(err)
}

但是test.txt并没有出现在我的文件夹中(即使在编译并运行代码之后)。这不是我第一次使用这种方法来执行命令,我从没想过我会在echo命令上阻塞。

那么如何修复此代码才能拥有" foo 0x50" (带引号)在test.txt?

2 个答案:

答案 0 :(得分:4)

您可以像这样重定向标准输出:

// Remove the redirect from command
cmd := exec.Command("echo", "\"foo 0x50\"")

// Make test file
testFile, err := os.Create("test.txt")
if err != nil {
    panic(err)
}
defer outfile.Close()

// Redirect the output here (this is the key part)
cmd.Stdout = testFile

err = cmd.Start(); if err != nil {
    panic(err)
}
cmd.Wait()

答案 1 :(得分:0)

对于想要在 oneline/string 中传递完整命令的任何人,

func call(command string) {
    cmd := exec.Command("sudo", "bash", "-c", command)
    cmd.Stdin = os.Stdin
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    err := cmd.Start()
    if err != nil {
      fmt.Println(err)
    }
    err1 := cmd.Wait()
    if err1 != nil {
      fmt.Println(err1)
    }
 }

Wait 等待命令退出并等待任何复制到 stdin 或从 stdout 或 stderr 复制完成。它在看到命令退出后关闭管道。

来源:

https://stackoverflow.com/a/43246464/9892358

https://stackoverflow.com/a/43246464/9892358

https://zetcode.com/golang/exec-command/