更新:要以编程方式“驱动” bash,您需要一个伪终端(PTY)。这就是我要找的:https://github.com/kr/ptypackage mainimport ( "github.com/kr/pty" "io" "os" "os/exec")func main() { c := exec.Command("grep", "--color=auto", "bar") f, err := pty.Start(c) if err != nil { panic(err) } go func() { f.Write([]byte("foo\n")) f.Write([]byte("bar\n")) f.Write([]byte("baz\n")) f.Write([]byte{4}) // EOT }() io.Copy(os.Stdout, f)}给出以下示例:package mainimport ( "fmt" "os")func main() { attr := &os.ProcAttr{ Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}, } process, err := os.StartProcess("/bin/bash", nil, attr) if err != nil { fmt.Printf("process err %v\n", err) return } state, err := process.Wait() if err != nil { fmt.Printf("wait err %v\n", err) } fmt.Printf("'%+v'\n", state)}我可以bash按预期运行:go run proc.gobash-3.2$ echo foofoobash-3.2$ exitexit'exit status 0'但是,我想指定我自己的可写流os.Stdin,当我尝试将文件 ( os.Open("/my/file"))传递给它时,该进程将该文件作为标准输入并在io.EOF. 如何创建一个“无限长”的可写文件?查看文档似乎我需要以os.OpenFile某种方式使用...
- 1 回答
- 0 关注
- 250 浏览
添加回答
举报
0/150
提交
取消