diff --git a/cmd/util.go b/cmd/util.go index 61902796..25a2f25a 100644 --- a/cmd/util.go +++ b/cmd/util.go @@ -3,10 +3,7 @@ package cmd import ( "bytes" "fmt" - "io" "os" - "os/exec" - "runtime" "strings" "github.com/fatih/color" @@ -20,22 +17,6 @@ func editFile(command, file string) error { return run(command, os.Stdin, os.Stdout) } -func run(command string, r io.Reader, w io.Writer) error { - var cmd *exec.Cmd - if len(config.Conf.General.Cmd) > 0 { - line := append(config.Conf.General.Cmd, command) - cmd = exec.Command(line[0], line[1:]...) - } else if runtime.GOOS == "windows" { - cmd = exec.Command("cmd", "/c", command) - } else { - cmd = exec.Command("sh", "-c", command) - } - cmd.Stderr = os.Stderr - cmd.Stdout = w - cmd.Stdin = r - return cmd.Run() -} - func filter(options []string, tag string) (commands []string, err error) { var snippets snippet.Snippets if err := snippets.Load(); err != nil { diff --git a/cmd/util_unix.go b/cmd/util_unix.go new file mode 100644 index 00000000..91ad71fa --- /dev/null +++ b/cmd/util_unix.go @@ -0,0 +1,25 @@ +//go:build (darwin && cgo) || linux + +package cmd + +import ( + "io" + "os" + "os/exec" + + "github.com/knqyf263/pet/config" +) + +func run(command string, r io.Reader, w io.Writer) error { + var cmd *exec.Cmd + if len(config.Conf.General.Cmd) > 0 { + line := append(config.Conf.General.Cmd, command) + cmd = exec.Command(line[0], line[1:]...) + } else { + cmd = exec.Command("sh", "-c", command) + } + cmd.Stderr = os.Stderr + cmd.Stdout = w + cmd.Stdin = r + return cmd.Run() +} diff --git a/cmd/util_windows.go b/cmd/util_windows.go new file mode 100644 index 00000000..2827fbb2 --- /dev/null +++ b/cmd/util_windows.go @@ -0,0 +1,28 @@ +//go:build windows + +package cmd + +import ( + "fmt" + "io" + "os" + "os/exec" + "syscall" + + "github.com/knqyf263/pet/config" +) + +func run(command string, r io.Reader, w io.Writer) error { + var cmd *exec.Cmd + if len(config.Conf.General.Cmd) > 0 { + line := append(config.Conf.General.Cmd, command) + cmd = exec.Command(line[0], line[1:]...) + } else { + cmd = exec.Command("cmd.exe") + cmd.SysProcAttr = &syscall.SysProcAttr{CmdLine: fmt.Sprintf("/c \"%s\"", command)} + } + cmd.Stderr = os.Stderr + cmd.Stdout = w + cmd.Stdin = r + return cmd.Run() +}