Files
natpass/code/client/rule/shell/exec_windows.go
2021-11-18 23:17:44 +08:00

60 lines
1020 B
Go

package shell
import (
"errors"
"os"
"os/exec"
)
// Exec execute shell command
func (link *Link) Exec() error {
var cmd *exec.Cmd
if len(link.parent.cfg.Exec) > 0 {
cmd = exec.Command(link.parent.cfg.Exec)
}
if cmd == nil {
dir, err := exec.LookPath("powershell")
if err == nil {
cmd = exec.Command(dir)
}
}
if cmd == nil {
dir, err := exec.LookPath("cmd")
if err == nil {
cmd = exec.Command(dir)
}
}
if cmd == nil {
return errors.New("no shell command supported")
}
cmd.Env = append(os.Environ(), link.parent.cfg.Env...)
var err error
link.stdin, err = cmd.StdinPipe()
if err != nil {
return err
}
link.stdout, err = cmd.StdoutPipe()
if err != nil {
return err
}
err = cmd.Start()
if err != nil {
return err
}
go cmd.Wait() // defunct process
link.pid = cmd.Process.Pid
return nil
}
func (link *Link) onClose() {
if link.stdin != nil {
link.stdin.Close()
}
if link.stdout != nil {
link.stdout.Close()
}
}
func (link *Link) resize(rows, cols uint32) {
}