cmd.go 657 B

123456789101112131415161718192021222324252627282930313233343536
  1. package cmd
  2. import (
  3. "fmt"
  4. "os/exec"
  5. "strings"
  6. )
  7. func ExecCmd(cmdStr string) (string, error) {
  8. args := splitArgs(cmdStr)
  9. var cmd *exec.Cmd
  10. if len(args) == 1 {
  11. cmd = exec.Command(args[0])
  12. } else {
  13. cmd = exec.Command(args[0], args[1:]...)
  14. }
  15. prepareBackgroundCommand(cmd)
  16. out, err := cmd.CombinedOutput()
  17. if err != nil {
  18. return "", fmt.Errorf("%v, %s", err, string(out))
  19. }
  20. return string(out), nil
  21. }
  22. func splitArgs(cmd string) []string {
  23. args := strings.Split(cmd, " ")
  24. // use in pipeline
  25. if len(args) > 2 && strings.ContainsAny(cmd, "|") {
  26. suffix := strings.Join(args[2:], " ")
  27. args = append(args[:2], suffix)
  28. }
  29. return args
  30. }