cmd.go 963 字节
Newer Older
1
package cmd
J
Jingwen Owen Ou 已提交
2 3

import (
J
Jingwen Owen Ou 已提交
4
	"fmt"
J
Jingwen Owen Ou 已提交
5
	"os"
J
Jingwen Owen Ou 已提交
6
	"os/exec"
J
Jingwen Owen Ou 已提交
7
	"syscall"
J
Jingwen Owen Ou 已提交
8 9
)

10
type Cmd struct {
J
Jingwen Owen Ou 已提交
11 12 13 14
	Name string
	Args []string
}

15
func (cmd *Cmd) WithArg(arg string) *Cmd {
J
Jingwen Owen Ou 已提交
16 17 18 19 20
	cmd.Args = append(cmd.Args, arg)

	return cmd
}

21
func (cmd *Cmd) ExecOutput() (string, error) {
J
Jingwen Owen Ou 已提交
22 23 24 25 26 27 28 29
	output, err := exec.Command(cmd.Name, cmd.Args...).Output()
	if err != nil {
		return "", err
	}

	return string(output), nil
}

30
func (cmd *Cmd) Exec() error {
J
Jingwen Owen Ou 已提交
31 32 33 34 35 36 37 38
	c := exec.Command(cmd.Name, cmd.Args...)
	c.Stdin = os.Stdin
	c.Stdout = os.Stdout
	c.Stderr = os.Stderr

	return c.Run()
}

J
Jingwen Owen Ou 已提交
39 40 41 42 43 44 45 46 47 48 49 50 51 52
func (cmd *Cmd) SysExec() error {
	binary, lookErr := exec.LookPath(cmd.Name)
	if lookErr != nil {
		return fmt.Errorf("command not found: %s", cmd.Name)
	}

	args := []string{cmd.Name}
	args = append(args, cmd.Args...)

	env := os.Environ()

	return syscall.Exec(binary, args, env)
}

53 54
func New(name string) *Cmd {
	return &Cmd{name, make([]string, 0)}
J
Jingwen Owen Ou 已提交
55
}
J
Jingwen Owen Ou 已提交
56 57 58 59

func NewWithArray(cmd []string) *Cmd {
	return &Cmd{cmd[0], cmd[1:]}
}