exec.go 786 B

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