如何在执行命令时将文件用作stdin

时间:2017-07-25 12:12:12

标签: go

我有这个非常简单的代码:

cmd := exec.Command("cat")
cmd.Stdout = os.Stdout
stdin, _ := cmd.StdinPipe()
file, _ := os.Open("file")
io.Copy(stdin, file)
_ = cmd.Run()

有效。但问题是cmd.Run()永远不会返回。在将文件写入stdin之后,cat仍在等待更多内容。

我试图做cat <file所做的事情,在这种情况下cat会在阅读文件后退出。

我想知道如何实现这一目标?

1 个答案:

答案 0 :(得分:3)

这是因为你没有关闭标准输入。在stdin.Close()之后添加io.Copy。然后cat将终止。

另外,我知道这只是一个例子,但绝对没有错误检查。我认为这只是为了说明目的。 : - )