go使用os/exec执行cmd命令,使用echo实现管道

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
}

运行结果及报错内容

img

这里有一篇文章描述了在CI中运行Terraform的规范方式:在自动化中运行Terraform
https://learn.hashicorp.com/tutorials/terraform/automate-terraform