forked from x/icebergs
add ssh history
This commit is contained in:
parent
6a83da3fd6
commit
5f36ef2b0f
@ -9,6 +9,7 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
@ -29,7 +30,7 @@ func (f *Frame) prompt(m *ice.Message) *Frame {
|
||||
case "count":
|
||||
fmt.Fprintf(f.out, kit.Format("%d", f.count))
|
||||
case "time":
|
||||
fmt.Fprintf(f.out, m.Time("15:04:05"))
|
||||
fmt.Fprintf(f.out, time.Now().Format("15:04:05"))
|
||||
case "target":
|
||||
fmt.Fprintf(f.out, f.target.Name)
|
||||
default:
|
||||
@ -41,7 +42,7 @@ func (f *Frame) prompt(m *ice.Message) *Frame {
|
||||
}
|
||||
func (f *Frame) printf(m *ice.Message, res string, arg ...interface{}) *Frame {
|
||||
if len(arg) > 0 {
|
||||
fmt.Fprintf(f.out, res, arg)
|
||||
fmt.Fprintf(f.out, res, arg...)
|
||||
} else {
|
||||
fmt.Fprint(f.out, res)
|
||||
}
|
||||
@ -150,10 +151,11 @@ func (f *Frame) Start(m *ice.Message, arg ...string) bool {
|
||||
m.Cap(ice.CTX_STREAM, "stdio")
|
||||
f.target = m.Target()
|
||||
default:
|
||||
// 解析脚本
|
||||
if s, e := os.Open(arg[0]); m.Warn(e != nil, "%s", e) {
|
||||
// 打开失败
|
||||
return true
|
||||
} else {
|
||||
// 解析脚本
|
||||
defer s.Close()
|
||||
if f.in, f.out = s, os.Stdout; m.Optionv(ice.MSG_STDOUT) != nil {
|
||||
f.out = m.Optionv(ice.MSG_STDOUT).(io.Writer)
|
||||
@ -186,16 +188,39 @@ func (f *Frame) Start(m *ice.Message, arg ...string) bool {
|
||||
line = ""
|
||||
continue
|
||||
}
|
||||
if strings.HasPrefix(strings.TrimSpace(line), "!") {
|
||||
m.Option("cache.offend", 0)
|
||||
m.Option("cache.limit", 30)
|
||||
if len(line) == 1 {
|
||||
// 历史记录
|
||||
m.Grows("history", nil, "", "", func(index int, value map[string]interface{}) {
|
||||
f.printf(m, "%d\t%s\n", index+1, value["line"])
|
||||
})
|
||||
line = ""
|
||||
continue
|
||||
}
|
||||
if i, e := strconv.Atoi(line[1:]); e == nil {
|
||||
// 历史命令
|
||||
m.Grows("history", nil, "id", kit.Format(i), func(index int, value map[string]interface{}) {
|
||||
line = kit.Format(value["line"])
|
||||
})
|
||||
} else {
|
||||
|
||||
m.Grow("history", nil, kit.Dict("line", line))
|
||||
m.Option(ice.MSG_PROMPT, m.Confv("prompt", "meta.PS1"))
|
||||
}
|
||||
} else {
|
||||
// 记录历史
|
||||
m.Grow("history", nil, kit.Dict("line", line))
|
||||
f.count++
|
||||
}
|
||||
|
||||
if f.out == os.Stdout {
|
||||
// 清空格式
|
||||
if m.Option(ice.MSG_PROMPT, m.Confv("prompt", "meta.PS1")); f.out == os.Stdout {
|
||||
f.printf(m, "\033[0m")
|
||||
}
|
||||
|
||||
// 解析命令
|
||||
f.parse(m, line)
|
||||
m.Cost("stdin: %v", line)
|
||||
f.count++
|
||||
line = ""
|
||||
}
|
||||
return true
|
||||
|
@ -26,7 +26,7 @@ var Index = &ice.Context{Name: "docker", Help: "虚拟机",
|
||||
"auto": {Name: "auto", Help: "自动化", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
prefix := []string{ice.CLI_SYSTEM, "docker"}
|
||||
// 创建容器
|
||||
pid := m.Cmdx(prefix, "run", "-dt", "--name", arg[0], "--mount", kit.Format("type=bind,source=%s,target=/root",
|
||||
pid := m.Cmdx(prefix, "run", "-dt", "-w", "/root", "--name", arg[0], "--mount", kit.Format("type=bind,source=%s,target=/root",
|
||||
kit.Path(m.Conf(ice.WEB_DREAM, "meta.path"), arg[0])), "alpine")
|
||||
m.Log(ice.LOG_CREATE, "%s: %s", arg[0], pid)
|
||||
|
||||
|
@ -167,6 +167,7 @@ ShyInit() {
|
||||
elif bindkey &>/dev/null; then
|
||||
# zsh
|
||||
bindkey -s '\C-G\C-R' 'ShySyncs base\n'
|
||||
bindkey -s '\C-G\C-G' 'ShySyncs history\n'
|
||||
setopt nosharehistory
|
||||
fi
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user