exec.go 779 B

123456789101112131415161718192021222324252627282930313233343536
  1. package exe
  2. import (
  3. "os"
  4. "os/exec"
  5. "strings"
  6. "github.com/Jguer/yay/v11/pkg/text"
  7. )
  8. type Runner interface {
  9. Capture(cmd *exec.Cmd) (stdout string, stderr string, err error)
  10. Show(cmd *exec.Cmd) error
  11. }
  12. type OSRunner struct{}
  13. func (r *OSRunner) Show(cmd *exec.Cmd) error {
  14. cmd.Stdin, cmd.Stdout, cmd.Stderr = os.Stdin, os.Stdout, os.Stderr
  15. text.Debugln("running", cmd.String())
  16. return cmd.Run()
  17. }
  18. func (r *OSRunner) Capture(cmd *exec.Cmd) (stdout, stderr string, err error) {
  19. text.Debugln("capturing", cmd.String())
  20. outbuf, err := cmd.Output()
  21. stdout = strings.TrimSpace(string(outbuf))
  22. if err != nil {
  23. if exitErr, isExitError := err.(*exec.ExitError); isExitError {
  24. stderr = strings.TrimSpace(string(exitErr.Stderr))
  25. }
  26. }
  27. return stdout, stderr, err
  28. }