package internal import ( "bufio" "fmt" "os/exec" ) // RunCmd runs a shell command and streams stdout/stderr in real-time. func RunCmd(cmd *exec.Cmd) error { r, err := cmd.StdoutPipe() if err != nil { return err } cmd.Stderr = cmd.Stdout done := make(chan struct{}) scanner := bufio.NewScanner(r) go func() { for scanner.Scan() { line := scanner.Text() fmt.Println(line) } done <- struct{}{} }() if err := cmd.Start(); err != nil { return err } <-done if err := cmd.Wait(); err != nil { return err } return nil }