我目前正在尝试在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?
答案 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