package exec import ( "errors" "fmt" osexec "os/exec" ) type cmdShell struct { executable string } func (s cmdShell) prepare(command string) (*execContext, error) { filename, err := createTempScript(command, ".cmd") if err != nil { return nil, err } return &execContext{ executable: s.executable, args: []string{"/D", "/E:ON", "/V:OFF", "/S", "/C", fmt.Sprintf(`CALL %s`, filename)}, scriptFile: filename, }, nil } func newCmdShell() (shell, error) { out, err := osexec.LookPath("cmd") if err != nil && !errors.Is(err, osexec.ErrNotFound) { return nil, err } // `cmd.exe` is not found, return early. if out == "" { return nil, nil } return &cmdShell{executable: out}, nil } func (s cmdShell) getType() ExecutableType { return CmdExecutable }