Bash 脚本命令执行在go程序中永远挂起
} 我正试图从go代码中执行一个bash脚本。该脚本更改了一些卡夫卡主题属性。但是执行被挂起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
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()
是首选。