go使用os/exec执行cmd命令,使用echo实现管道自动化交互操作失败
terraform appply
命令在执行过程中,会有一个需要输入 yes 的二次确认。在下面的Apply函数中,希望使用echo命令来实现管道操作。T.T请问我该怎么改才能正确实现这一步操作……T.T
问题相关代码,请勿粘贴截图
func Apply() error {
c1 := exec.Command("terraform", "apply")
c2 := exec.Command("cmd", "echo yes")
c2.Stdin, _ = c1.StdoutPipe()
c2.Stdout = os.Stdout
var stdo1, stdo2, stderr1, stderr2 bytes.Buffer
c1.Stdout = &stdo1
c1.Stderr = &stderr1
c2.Stdout = &stdo2
c2.Stderr = &stderr2
e2 := c2.Start()
e1 := c1.Run()
_ = c2.Wait()
outStr1, errStr1, outStr2, errStr2 := string(stdo1.Bytes()), string(stderr1.Bytes()),
string(stdo2.Bytes()), string(stderr2.Bytes())
fmt.Printf("out:\n%s\n", outStr1)
if e1 != nil {
// 执行错误处理
fmt.Println("cmd run failed:\n", errStr1)
return errors.New(e1.Error())
} else {
fmt.Printf("out:\n%s\n", outStr2)
if e2 != nil {
// 执行错误处理
fmt.Println("cmd run failed:\n", errStr2)
return errors.New(e2.Error())
}
}
return nil
}