0
0
forked from toolshed/abra
Files
.gitea
cli
app
catalogue
formatter
internal
command.go
common.go
copy.go
deploy.go
errors.go
new.go
recipe.go
record.go
server.go
validate.go
recipe
record
server
autocomplete.go
cli.go
upgrade.go
cmd
pkg
scripts
tests
.drone.yml
.envrc.sample
.gitignore
.goreleaser.yml
Makefile
README.md
go.mod
go.sum
renovate.json
abra/cli/internal/command.go
2021-09-11 11:45:26 +02:00

40 lines
556 B
Go

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
}