diff --git a/base/cli/cli.go b/base/cli/cli.go index df68cf21..a764394a 100644 --- a/base/cli/cli.go +++ b/base/cli/cli.go @@ -11,4 +11,4 @@ var Index = &ice.Context{Name: CLI, Help: "命令模块"} func Prefix(arg ...string) string { return kit.Keys(CLI, arg) } -func init() { ice.Index.Register(Index, nil, RUNTIME, SYSTEM, DAEMON, FOREVER, MIRRORS, QRCODE) } +func init() { ice.Index.Register(Index, nil, RUNTIME, SYSTEM, DAEMON, FOREVER, MIRRORS, QRCODE, SUDO) } diff --git a/core/code/xterm.go b/core/code/xterm.go index 2286c83f..8ca2d84e 100644 --- a/core/code/xterm.go +++ b/core/code/xterm.go @@ -54,7 +54,7 @@ func _xterm_get(m *ice.Message, h string) xterm.XTerm { } func _xterm_echo(m *ice.Message, h string, str string) { m.Options(ice.MSG_DAEMON, mdb.HashSelectField(m, h, cli.DAEMON), ice.MSG_COUNT, "0") - // m.Options(ice.LOG_DISABLE, ice.TRUE) + m.Options(ice.LOG_DISABLE, ice.TRUE) web.PushNoticeGrow(m, h, str) } func _xterm_cmds(m *ice.Message, h string, cmd string, arg ...ice.Any) { diff --git a/misc/xterm/xterm.go b/misc/xterm/xterm.go index e5e35c8e..eba53ec1 100644 --- a/misc/xterm/xterm.go +++ b/misc/xterm/xterm.go @@ -7,6 +7,7 @@ import ( "path" ice "shylinux.com/x/icebergs" + "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/lex" "shylinux.com/x/icebergs/base/nfs" kit "shylinux.com/x/toolkits" @@ -45,21 +46,25 @@ var list = map[string]handler{} func AddCommand(key string, cb handler) { list[key] = cb } -func Command(m *ice.Message, dir string, cli string, arg ...string) (XTerm, error) { - if cb, ok := list[path.Base(cli)]; ok { - m.Debug("find shell %s %s", cli, kit.FileLines(cb)) +func Command(m *ice.Message, dir string, cmd string, arg ...string) (XTerm, error) { + if cb, ok := list[path.Base(cmd)]; ok { + m.Debug("find shell %s %s", cmd, kit.FileLines(cb)) return cb(m.Spawn(), arg...) } - cmd := exec.Command(cli, arg...) - cmd.Dir = nfs.MkdirAll(m, kit.Path(dir)) - cmd.Env = append(cmd.Env, os.Environ()...) - cmd.Env = append(cmd.Env, "TERM=xterm") + if m.Cmd(cli.SUDO, cmd).Length() > 0 { + m.Debug("find sudo %s", cmd) + cmd, arg = cli.SUDO, kit.Simple(cmd, arg) + } + p := exec.Command(cmd, arg...) + p.Dir = nfs.MkdirAll(m, kit.Path(dir)) + p.Env = append(p.Env, os.Environ()...) + p.Env = append(p.Env, "TERM=xterm") if pty, tty, err := Open(); err != nil { return nil, err } else { - Setsid(cmd) - cmd.Stdin, cmd.Stdout, cmd.Stderr = tty, tty, tty - return &xterm{cmd, pty}, cmd.Start() + Setsid(p) + p.Stdin, p.Stdout, p.Stderr = tty, tty, tty + return &xterm{p, pty}, p.Start() } } func PushShell(m *ice.Message, xterm XTerm, cmds []string, cb func(string)) {