Я видел через golang, что вы можете сделать только один Stdin
, поэтому я пытаюсь получить два конвейерных входа в cmd1.exec.Command()
, один через Stdin
, а другой через ExtraFiles
, но канал ExtraFiles
давая pipe:1: Bad file descriptor
когда cmd1
пытается прочитать
cmd1 := exec.Command("command1", "-i", "pipe:0", "-i", "pipe:1", "more stuff")
cmd2 := exec.Command("command2", "-o", "-")
cmd3 := exec.Command("command3", "-o", "-")
stdin, stdinErr := cmd2.StdoutPipe()
if stdinErr != nil {
return stdinErr
}
cmd2.Start()
cmd1.Stdin = stdin
pipeR, pipeW, _ := os.Pipe()
cmd1.ExtraFiles = []*os.File{pipeW}
extrastdin, extrastdinErr := cmd3.StdoutPipe()
if extrastdinErr != nil {
return extrastdinErr
}
cmd3.Start()
fd3 := os.NewFile(3, "/proc/self/fd/3")
body, err := ioutil.ReadAll(extrastdin)
if err != nil {
return err
}
fd3.Write(body)
defer pipeR.Close()
defer pipeW.Close()
defer fd3.Close()