mirror of
https://github.com/lwch/natpass.git
synced 2024-04-21 12:41:54 +00:00
48 lines
742 B
Go
48 lines
742 B
Go
// +build !windows
|
|
|
|
package shell
|
|
|
|
import (
|
|
"errors"
|
|
"os/exec"
|
|
|
|
"github.com/creack/pty"
|
|
)
|
|
|
|
func (shell *Shell) Exec(id string) error {
|
|
shell.id = id
|
|
var cmd *exec.Cmd
|
|
if len(shell.cfg.Exec) > 0 {
|
|
cmd = exec.Command(shell.cfg.Exec)
|
|
}
|
|
if cmd == nil {
|
|
dir, err := exec.LookPath("bash")
|
|
if err == nil {
|
|
cmd = exec.Command(dir)
|
|
}
|
|
}
|
|
if cmd == nil {
|
|
dir, err := exec.LookPath("sh")
|
|
if err == nil {
|
|
cmd = exec.Command(dir)
|
|
}
|
|
}
|
|
if cmd == nil {
|
|
return errors.New("no shell command supported")
|
|
}
|
|
f, err := pty.Start(cmd)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
shell.stdin = f
|
|
shell.stdout = f
|
|
shell.pid = cmd.Process.Pid
|
|
return nil
|
|
}
|
|
|
|
func (shell *Shell) onClose() {
|
|
if shell.stdin != nil {
|
|
shell.stdin.Close()
|
|
}
|
|
}
|