mirror of
https://github.com/MetaCubeX/mihomo.git
synced 2024-11-16 19:56:51 +08:00
36 lines
626 B
Go
36 lines
626 B
Go
|
package cmd
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"os/exec"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
func ExecCmd(cmdStr string) (string, error) {
|
||
|
args := splitArgs(cmdStr)
|
||
|
|
||
|
var cmd *exec.Cmd
|
||
|
if len(args) == 1 {
|
||
|
cmd = exec.Command(args[0])
|
||
|
} else {
|
||
|
cmd = exec.Command(args[0], args[1:]...)
|
||
|
}
|
||
|
|
||
|
out, err := cmd.CombinedOutput()
|
||
|
if err != nil {
|
||
|
return "", fmt.Errorf("%v, %s", err, string(out))
|
||
|
}
|
||
|
return string(out), nil
|
||
|
}
|
||
|
|
||
|
func splitArgs(cmd string) []string {
|
||
|
args := strings.Split(cmd, " ")
|
||
|
|
||
|
// use in pipeline
|
||
|
if len(args) > 2 && strings.ContainsAny(cmd, "|") {
|
||
|
suffix := strings.Join(args[2:], " ")
|
||
|
args = append(args[:2], suffix)
|
||
|
}
|
||
|
return args
|
||
|
}
|