Bash 脚本命令执行在go程序中永远挂起

Bash 脚本命令执行在go程序中永远挂起,bash,go,Bash,Go,} 我正试图从go代码中执行一个bash脚本。该脚本更改了一些卡夫卡主题属性。但是执行被挂起io.Copy(f,stdout),之后不会继续执行。 此程序正在RHEL7.2服务器上运行 有人能从下面的列表中指出我的错误所在吗: Wait将在看到命令退出后关闭管道 换句话说,调用Wait()时io.Copy退出,但Wait永远不会被调用,因为它被Copy阻止。在goroutine中运行Copy,或者简单地将f分配给cmd.Stdout: func Run() error { log.Inf

}

我正试图从go代码中执行一个bash脚本。该脚本更改了一些卡夫卡主题属性。但是执行被挂起
io.Copy(f,stdout)
,之后不会继续执行。 此程序正在RHEL7.2服务器上运行

有人能从下面的列表中指出我的错误所在吗

Wait将在看到命令退出后关闭管道

换句话说,调用Wait()时io.Copy退出,但Wait永远不会被调用,因为它被Copy阻止。在goroutine中运行Copy,或者简单地将
f
分配给
cmd.Stdout

func Run() error {
    log.Info("In Run Command")
    cmd := exec.Command("bash", "/opt/AlterKafkaTopic.sh")
    stdout, err := cmd.StdoutPipe()
    if err != nil {
            return err
    }
    if err = cmd.Start(); err != nil {
           return err
    }
    f, err := os.Create(filepath.Join("/opt/log/", "execution.log"))
    if err != nil {
            return err
    }
    if _, err := io.Copy(f, stdout); err != nil {
            return err
    }
         if err := cmd.Wait(); err != nil {
            return err
    }
     return f.Close()
从:

Wait将在看到命令退出后关闭管道

换句话说,调用Wait()时io.Copy退出,但Wait永远不会被调用,因为它被Copy阻止。在goroutine中运行Copy,或者简单地将
f
分配给
cmd.Stdout

func Run() error {
    log.Info("In Run Command")
    cmd := exec.Command("bash", "/opt/AlterKafkaTopic.sh")
    stdout, err := cmd.StdoutPipe()
    if err != nil {
            return err
    }
    if err = cmd.Start(); err != nil {
           return err
    }
    f, err := os.Create(filepath.Join("/opt/log/", "execution.log"))
    if err != nil {
            return err
    }
    if _, err := io.Copy(f, stdout); err != nil {
            return err
    }
         if err := cmd.Wait(); err != nil {
            return err
    }
     return f.Close()

bash脚本是否退出?例如,尝试使用
回显某个东西的简单脚本。顺便说一句,如果
io.Copy
cmd.Wait
返回错误,则保持
f
未关闭。这就是为什么首选
延迟f.Close()
的原因。bash脚本退出了吗?例如,尝试使用
回显某个东西的简单脚本。顺便说一句,如果
io.Copy
cmd.Wait
返回错误,则保持
f
未关闭。这就是为什么
延迟f.Close()
是首选。