forked from toolshed/abra
		
	
		
			
				
	
	
		
			40 lines
		
	
	
		
			556 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			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
 | |
| }
 |