package main import ( "fmt" "os" "os/exec" "github.com/mattn/go-isatty" "flag" "log" "io" ) func main() { flag.Parse() prog := flag.Args()[0] // ignore SIGHUP if isatty.IsTerminal(os.Stdout.Fd()) { fmt.Println("Is Terminal") } else if isatty.IsCygwinTerminal(os.Stdout.Fd()) { fmt.Println("Is cygwin/msys2 terminal") } else { cmd := exec.Command(prog) if cmd.Err != nil { log.Fatal(cmd.Err) } in, err := cmd.StdinPipe() if err != nil { log.Fatal(err) } in.Close() stdout, err := cmd.StdoutPipe() if err != nil { log.Fatal(err) } stderr, err := cmd.StderrPipe() if err != nil { log.Fatal(err) } output := io.MultiReader(stdout, stderr) err = cmd.Start() if err != nil { log.Fatal(err) } _, err = io.Copy(os.Stdout, output) if err != nil { log.Fatal(err) } } }