mirror of
https://shylinux.com/x/icebergs
synced 2025-04-26 01:24:05 +08:00
opt bash
This commit is contained in:
parent
593663cbdf
commit
c0e6fabb5f
41
misc/bash/bash.go
Normal file
41
misc/bash/bash.go
Normal file
@ -0,0 +1,41 @@
|
||||
package bash
|
||||
|
||||
import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/gdb"
|
||||
"github.com/shylinux/icebergs/base/web"
|
||||
"github.com/shylinux/icebergs/core/code"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"path"
|
||||
)
|
||||
|
||||
const BASH = "bash"
|
||||
|
||||
var Index = &ice.Context{Name: BASH, Help: "命令行",
|
||||
Configs: map[string]*ice.Config{
|
||||
BASH: {Name: BASH, Help: "命令行", Value: kit.Data(
|
||||
"source", "http://mirrors.aliyun.com/gnu/bash/bash-4.2.53.tar.gz",
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Load() }},
|
||||
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save() }},
|
||||
|
||||
BASH: {Name: "bash port path auto start build download", Help: "命令行", Action: map[string]*ice.Action{
|
||||
web.DOWNLOAD: {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(code.INSTALL, web.DOWNLOAD, m.Conf(BASH, kit.META_SOURCE))
|
||||
}},
|
||||
gdb.BUILD: {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(code.INSTALL, gdb.BUILD, m.Conf(BASH, kit.META_SOURCE))
|
||||
}},
|
||||
gdb.START: {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(code.INSTALL, gdb.START, m.Conf(BASH, kit.META_SOURCE), "bin/bash")
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmdy(code.INSTALL, path.Base(m.Conf(BASH, kit.META_SOURCE)), arg)
|
||||
}},
|
||||
},
|
||||
}
|
||||
|
||||
func init() { code.Index.Register(Index, &web.Frame{}) }
|
35
misc/bash/bash.shy
Normal file
35
misc/bash/bash.shy
Normal file
@ -0,0 +1,35 @@
|
||||
title "bash"
|
||||
refer `
|
||||
官网 https://www.gnu.org/software/bash/
|
||||
文档 https://www.gnu.org/software/bash/manual/bash.html
|
||||
源码 http://ftp.gnu.org/gnu/bash/
|
||||
`
|
||||
|
||||
chapter "源码"
|
||||
field "bash" web.code.bash.bash
|
||||
field "bash" web.code.inner args `usr/install/bash-4.2.53/ input.c 625`
|
||||
|
||||
section "构建"
|
||||
spark shell `
|
||||
yum install -y wget make gcc
|
||||
yum install -y byacc.x86_64
|
||||
|
||||
wget http://mirrors.aliyun.com/gnu/bash/bash-4.2.53.tar.gz
|
||||
tar xvf bash-4.2.53.tar.gz && cd bash-4.2.53
|
||||
|
||||
./configure --prefix=$PWD/_install
|
||||
make -j8 && make install
|
||||
`
|
||||
|
||||
section "启动"
|
||||
spark shell `
|
||||
cd ./_install
|
||||
./bin/bash
|
||||
`
|
||||
|
||||
chapter "应用"
|
||||
field "会话流" web.code.bash.sess
|
||||
field "同步流" web.code.bash.sync
|
||||
field "收藏夹" web.code.bash.favor
|
||||
field "回收站" web.code.bash.trash
|
||||
|
35
misc/bash/download.go
Normal file
35
misc/bash/download.go
Normal file
@ -0,0 +1,35 @@
|
||||
package bash
|
||||
|
||||
import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/web"
|
||||
"github.com/shylinux/icebergs/core/chat"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
)
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Commands: map[string]*ice.Command{
|
||||
"/download": {Name: "/download", Help: "下载", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) == 0 || arg[0] == "" {
|
||||
m.Cmdy(chat.FILES).Table()
|
||||
return
|
||||
}
|
||||
|
||||
// 下载文件
|
||||
m.Cmdy(web.CACHE, m.Cmd(chat.FILES, arg[0]).Append(kit.MDB_DATA))
|
||||
m.Render(kit.Select(ice.RENDER_DOWNLOAD, ice.RENDER_RESULT, m.Append(kit.MDB_FILE) == ""), m.Append(kit.MDB_TEXT))
|
||||
}},
|
||||
"/upload": {Name: "/upload", Help: "上传", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
// 缓存文件
|
||||
msg := m.Cmd(web.CACHE, web.UPLOAD)
|
||||
m.Option(ice.MSG_UPLOAD, msg.Append(kit.MDB_HASH), msg.Append(kit.MDB_NAME))
|
||||
m.Cmd(chat.FILES, web.UPLOAD)
|
||||
|
||||
for _, k := range []string{kit.MDB_DATA, kit.MDB_TIME, kit.MDB_TYPE, kit.MDB_NAME, kit.MDB_SIZE} {
|
||||
m.Echo("%s: %s\n", k, msg.Append(k))
|
||||
}
|
||||
}},
|
||||
},
|
||||
})
|
||||
}
|
85
misc/bash/favor.go
Normal file
85
misc/bash/favor.go
Normal file
@ -0,0 +1,85 @@
|
||||
package bash
|
||||
|
||||
import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
)
|
||||
|
||||
const FAVOR = "favor"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data(
|
||||
kit.MDB_SHORT, kit.MDB_TOPIC, kit.MDB_FIELD, "time,id,type,name,text",
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
FAVOR: {Name: "favor topic id auto create export import", Help: "收藏夹", Action: map[string]*ice.Action{
|
||||
mdb.CREATE: {Name: "create topic", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, arg)
|
||||
}},
|
||||
mdb.INSERT: {Name: "insert topic=系统命令 type=shell name=1 text=pwd pwd=/home", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC))
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), kit.SubKey(m.Option(kit.MDB_TOPIC)), mdb.LIST, arg[2:])
|
||||
}},
|
||||
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.MODIFY, m.Prefix(FAVOR), kit.SubKey(m.Option(kit.MDB_TOPIC)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg)
|
||||
}},
|
||||
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(FAVOR), "", mdb.HASH, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC))
|
||||
}},
|
||||
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.EXPORT, m.Prefix(FAVOR), "", mdb.HASH)
|
||||
}},
|
||||
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.IMPORT, m.Prefix(FAVOR), "", mdb.HASH)
|
||||
}},
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
switch arg[0] {
|
||||
case kit.MDB_TOPIC:
|
||||
m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), "", mdb.HASH, arg)
|
||||
default:
|
||||
m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), kit.SubKey(m.Option(kit.MDB_TOPIC)), mdb.LIST, arg)
|
||||
}
|
||||
}},
|
||||
cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) > 0 && arg[0] == mdb.ENGINE {
|
||||
m.Cmdy(cli.SYSTEM, arg[1:])
|
||||
return
|
||||
}
|
||||
|
||||
m.PushPlugin(cli.SYSTEM, cli.SYSTEM, mdb.ENGINE)
|
||||
m.Push(kit.SSH_ARG, kit.Split(m.Option(kit.MDB_TEXT)))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) == 0 {
|
||||
m.Option(mdb.FIELDS, "time,count,topic")
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.HASH)
|
||||
m.PushAction(mdb.REMOVE)
|
||||
return
|
||||
}
|
||||
|
||||
m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(FAVOR), kit.META_FIELD), mdb.DETAIL, len(arg) > 1))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), kit.SubKey(arg[0]), mdb.LIST, kit.MDB_ID, arg[1:])
|
||||
m.PushAction(cli.SYSTEM)
|
||||
}},
|
||||
|
||||
"/favor": {Name: "/favor", Help: "收藏", Action: map[string]*ice.Action{
|
||||
mdb.EXPORT: {Name: "export tab note", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Echo("#!/bin/sh\n\n")
|
||||
m.Cmdy(m.Prefix(FAVOR), m.Option("tab")).Table(func(index int, value map[string]string, head []string) {
|
||||
// 查看收藏
|
||||
if m.Option("note") == "" || m.Option("note") == value[kit.MDB_NAME] {
|
||||
m.Echo("# %v\n%v\n\n", value[kit.MDB_NAME], value[kit.MDB_TEXT])
|
||||
}
|
||||
})
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmdy(m.Prefix(FAVOR)).Table()
|
||||
}},
|
||||
},
|
||||
})
|
||||
}
|
107
misc/bash/input.go
Normal file
107
misc/bash/input.go
Normal file
@ -0,0 +1,107 @@
|
||||
package bash
|
||||
|
||||
import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"strings"
|
||||
"unicode"
|
||||
)
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Commands: map[string]*ice.Command{
|
||||
"/qrcode": {Name: "/qrcode", Help: "二维码", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmdy(cli.SYSTEM, cli.QRCODE, kit.MDB_TEXT, m.Option(kit.MDB_TEXT))
|
||||
}},
|
||||
"/input": {Name: "/input", Help: "补全", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
list := kit.Split(m.Option("line"), m.Option("break"))
|
||||
word := list[kit.Int(m.Option("index"))]
|
||||
switch arg[0] {
|
||||
case "shy":
|
||||
m.Cmd("web.code.input.find", word).Table(func(index int, value map[string]string, head []string) {
|
||||
m.Echo(value["text"]).Echo(" ")
|
||||
})
|
||||
|
||||
case "line":
|
||||
if strings.HasPrefix(m.Option("line"), "ice ") {
|
||||
list := kit.Split(m.Option("line"))
|
||||
switch list[1] {
|
||||
case "add":
|
||||
m.Cmd("web.code.input.push", list[2:])
|
||||
m.Option("line", list[4])
|
||||
m.Option("point", 0)
|
||||
default:
|
||||
m.Cmdy(list[1:])
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
line := []rune(m.Option("line"))
|
||||
if begin := kit.Int(m.Option("point")); begin < len(line) {
|
||||
m.Richs("login", nil, m.Option("sid"), func(key string, value map[string]interface{}) {
|
||||
m.Echo(string(line[:begin]))
|
||||
for i := begin; i < len(line); i++ {
|
||||
if i-begin < 3 && i < len(line)-1 {
|
||||
continue
|
||||
}
|
||||
// 编码转换
|
||||
for j := 0; j < 4; j++ {
|
||||
code := string(line[begin : i+1-j])
|
||||
list := append(m.Cmd("web.code.input.find", code).Appendv("text"), code)
|
||||
if len(list) > 1 {
|
||||
m.Echo(kit.Select(code, list[0]))
|
||||
m.Info("input %s->%s", code, list[0])
|
||||
i = i - j
|
||||
break
|
||||
}
|
||||
}
|
||||
// 输出编码
|
||||
begin = i + 1
|
||||
}
|
||||
})
|
||||
break
|
||||
}
|
||||
fallthrough
|
||||
case "end":
|
||||
m.Richs("login", nil, m.Option("sid"), func(key string, value map[string]interface{}) {
|
||||
last_text := kit.Format(kit.Value(value, "last.text"))
|
||||
last_list := kit.Simple(kit.Value(value, "last.list"))
|
||||
last_index := kit.Int(kit.Value(value, "last.index"))
|
||||
|
||||
if last_text != "" && strings.HasSuffix(m.Option("line"), last_text) {
|
||||
// 补全记录
|
||||
index := last_index + 1
|
||||
text := last_list[index%len(last_list)]
|
||||
kit.Value(value, "last.index", index)
|
||||
kit.Value(value, "last.text", text)
|
||||
m.Echo(strings.TrimSuffix(m.Option("line"), last_text) + text)
|
||||
m.Info("%d %v", index, last_list)
|
||||
return
|
||||
}
|
||||
|
||||
line := []rune(m.Option("line"))
|
||||
for i := len(line); i >= 0; i-- {
|
||||
if i > 0 && len(line)-i < 4 && unicode.IsLower(line[i-1]) {
|
||||
continue
|
||||
}
|
||||
|
||||
// 编码转换
|
||||
code := string(line[i:])
|
||||
list := append(m.Cmd("web.code.input.find", code).Appendv("text"), code)
|
||||
value["last"] = kit.Dict("code", code, "text", list[0], "list", list, "index", 0)
|
||||
|
||||
// 输出编码
|
||||
m.Echo(string(line[:i]))
|
||||
m.Echo(kit.Select(code, list[0]))
|
||||
m.Info("input %s->%s", code, list[0])
|
||||
break
|
||||
}
|
||||
})
|
||||
}
|
||||
m.Info("trans: %v", m.Result())
|
||||
}},
|
||||
},
|
||||
})
|
||||
}
|
80
misc/bash/sess.go
Normal file
80
misc/bash/sess.go
Normal file
@ -0,0 +1,80 @@
|
||||
package bash
|
||||
|
||||
import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/aaa"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/tcp"
|
||||
"github.com/shylinux/icebergs/base/web"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"io/ioutil"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
SID = "sid"
|
||||
ARG = "arg"
|
||||
SUB = "sub"
|
||||
PWD = "pwd"
|
||||
PID = "pid"
|
||||
)
|
||||
const (
|
||||
LOGIN = "login"
|
||||
LOGOUT = "logout"
|
||||
)
|
||||
const SESS = "sess"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
SESS: {Name: SESS, Help: "会话流", Value: kit.Data(
|
||||
kit.MDB_FIELD, "time,hash,status,username,hostname,pid,pwd",
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
SESS: {Name: "sess hash auto prunes", Help: "会话流", Action: map[string]*ice.Action{
|
||||
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Option(mdb.FIELDS, m.Conf(m.Prefix(SESS), kit.META_FIELD))
|
||||
m.Cmdy(mdb.PRUNES, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, LOGOUT)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(SESS), kit.META_FIELD), mdb.DETAIL, len(arg) > 0))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, arg)
|
||||
}},
|
||||
|
||||
web.LOGIN: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if f, _, e := m.R.FormFile(SUB); e == nil {
|
||||
defer f.Close()
|
||||
// 文件参数
|
||||
if b, e := ioutil.ReadAll(f); e == nil {
|
||||
m.Option(SUB, string(b))
|
||||
}
|
||||
}
|
||||
|
||||
if strings.TrimSpace(m.Option(SID)) != "" {
|
||||
m.Option(mdb.FIELDS, m.Conf(m.Prefix(SESS), kit.META_FIELD))
|
||||
msg := m.Cmd(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, strings.TrimSpace(m.Option(SID)))
|
||||
if m.Option(SID, msg.Append(kit.MDB_HASH)) != "" {
|
||||
m.Option(aaa.USERNAME, msg.Append(aaa.USERNAME))
|
||||
m.Option(tcp.HOSTNAME, msg.Append(tcp.HOSTNAME))
|
||||
}
|
||||
}
|
||||
m.Render(ice.RENDER_RESULT)
|
||||
}},
|
||||
"/sess": {Name: "/sess", Help: "会话", Action: map[string]*ice.Action{
|
||||
LOGOUT: {Name: "logout", Help: "退出", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), kit.MDB_STATUS, LOGOUT)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if strings.TrimSpace(m.Option(SID)) == "" {
|
||||
m.Option(SID, m.Cmdx(mdb.INSERT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, LOGIN,
|
||||
aaa.USERNAME, m.Option(aaa.USERNAME), tcp.HOSTNAME, m.Option(tcp.HOSTNAME), PID, m.Option(PID), PWD, m.Option(PWD)))
|
||||
} else {
|
||||
m.Cmdy(mdb.MODIFY, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, m.Option(SID), kit.MDB_STATUS, LOGIN)
|
||||
}
|
||||
m.Echo(m.Option(SID))
|
||||
}},
|
||||
},
|
||||
})
|
||||
}
|
73
misc/bash/sync.go
Normal file
73
misc/bash/sync.go
Normal file
@ -0,0 +1,73 @@
|
||||
package bash
|
||||
|
||||
import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/aaa"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/tcp"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
SHELL = "shell"
|
||||
HISTORY = "history"
|
||||
)
|
||||
const SYNC = "sync"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
SYNC: {Name: SYNC, Help: "同步流", Value: kit.Data(
|
||||
kit.MDB_SHORT, kit.MDB_NAME, kit.MDB_FIELD, "time,id,type,name,text",
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
SYNC: {Name: "sync id auto export import", Help: "同步流", Action: map[string]*ice.Action{
|
||||
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.EXPORT, m.Prefix(SYNC), "", mdb.LIST)
|
||||
}},
|
||||
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.IMPORT, m.Prefix(SYNC), "", mdb.LIST)
|
||||
}},
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
switch arg[0] {
|
||||
case kit.MDB_TOPIC:
|
||||
m.Cmdy(m.Prefix(FAVOR)).Appendv(ice.MSG_APPEND, kit.MDB_TOPIC, kit.MDB_COUNT, kit.MDB_TIME)
|
||||
}
|
||||
}},
|
||||
FAVOR: {Name: "favor topic type name text", Help: "收藏", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(m.Prefix(FAVOR), mdb.INSERT, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC),
|
||||
kit.MDB_TYPE, m.Option(kit.MDB_TYPE), kit.MDB_NAME, m.Option(kit.MDB_NAME), kit.MDB_TEXT, m.Option(kit.MDB_TEXT))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) > 0 {
|
||||
m.Option(mdb.FIELDS, mdb.DETAIL)
|
||||
m.Option(mdb.CACHE_FILED, kit.MDB_ID)
|
||||
m.Option(mdb.CACHE_VALUE, arg[0])
|
||||
} else {
|
||||
m.Option(mdb.FIELDS, m.Conf(SYNC, kit.META_FIELD))
|
||||
m.Option(ice.MSG_CONTROL, ice.CONTROL_PAGE)
|
||||
defer m.PushAction(FAVOR)
|
||||
}
|
||||
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, m.Option(mdb.CACHE_FILED), m.Option(mdb.CACHE_VALUE))
|
||||
}},
|
||||
"/sync": {Name: "/sync", Help: "同步", Action: map[string]*ice.Action{
|
||||
HISTORY: {Name: "history", Help: "历史", Hand: func(m *ice.Message, arg ...string) {
|
||||
ls := strings.SplitN(strings.TrimSpace(m.Option(ARG)), " ", 4)
|
||||
if text := strings.TrimSpace(strings.Join(ls[3:], " ")); text != "" {
|
||||
m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_TYPE, SHELL, kit.MDB_NAME, ls[0],
|
||||
tcp.HOSTNAME, m.Option(tcp.HOSTNAME), aaa.USERNAME, m.Option(aaa.USERNAME),
|
||||
kit.MDB_TEXT, text, PWD, m.Option(PWD), kit.MDB_TIME, ls[1]+" "+ls[2])
|
||||
|
||||
}
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmd(mdb.INSERT, m.Prefix(SYNC), "", mdb.HASH, kit.MDB_TYPE, SHELL, kit.MDB_NAME, arg[0],
|
||||
kit.MDB_TEXT, m.Option(SUB), PWD, m.Option(PWD))
|
||||
}},
|
||||
},
|
||||
})
|
||||
}
|
59
misc/bash/trash.go
Normal file
59
misc/bash/trash.go
Normal file
@ -0,0 +1,59 @@
|
||||
package bash
|
||||
|
||||
import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/nfs"
|
||||
"github.com/shylinux/icebergs/base/tcp"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"path"
|
||||
)
|
||||
|
||||
const TRASH = "trash"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
TRASH: {Name: TRASH, Help: "回收站", Value: kit.Data(
|
||||
kit.MDB_FIELD, "time,hash,hostname,size,from,to",
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
TRASH: {Name: "TRASH hash path auto prunes", Help: "回收站", Action: map[string]*ice.Action{
|
||||
mdb.INSERT: {Name: "insert from= to=", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(TRASH), "", mdb.HASH, "from", m.Option("from"), "to", m.Option("to"))
|
||||
}},
|
||||
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(cli.SYSTEM, "rm", "-rf", m.Option("to"))
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(TRASH), "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
||||
}},
|
||||
"reback": {Name: "reback", Help: "恢复", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(cli.SYSTEM, "mv", m.Option("to"), m.Option("from"))
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(TRASH), "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
||||
}},
|
||||
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) > 0 {
|
||||
m.Cmd(mdb.SELECT, m.Prefix(TRASH), "", mdb.HASH, kit.MDB_HASH, arg).Table(func(index int, value map[string]string, head []string) {
|
||||
m.Cmdy(nfs.DIR, path.Join(value["to"], kit.Select("", arg, 1)))
|
||||
})
|
||||
return
|
||||
}
|
||||
m.Option(mdb.FIELDS, kit.Select(m.Conf(m.Prefix(TRASH), kit.META_FIELD), mdb.DETAIL, len(arg) > 0))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(TRASH), "", mdb.HASH, kit.MDB_HASH, arg)
|
||||
m.PushAction("reback", mdb.REMOVE)
|
||||
}},
|
||||
|
||||
"/trash": {Name: "/trash", Help: "回收", Action: map[string]*ice.Action{
|
||||
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(TRASH), "", mdb.HASH, tcp.HOSTNAME, m.Option(tcp.HOSTNAME),
|
||||
kit.MDB_SIZE, m.Option(kit.MDB_SIZE), "from", m.Option("from"), "to", m.Option("to"))
|
||||
}},
|
||||
},
|
||||
})
|
||||
}
|
38
misc/bash/zsh.go
Normal file
38
misc/bash/zsh.go
Normal file
@ -0,0 +1,38 @@
|
||||
package bash
|
||||
|
||||
import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/gdb"
|
||||
"github.com/shylinux/icebergs/base/web"
|
||||
"github.com/shylinux/icebergs/core/code"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"path"
|
||||
)
|
||||
|
||||
const ZSH = "zsh"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
ZSH: {Name: ZSH, Help: "命令行", Value: kit.Data(
|
||||
"source", "https://nchc.dl.sourceforge.net/project/zsh/zsh/5.8/zsh-5.8.tar.xz",
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
ZSH: {Name: "zsh port path auto start build download", Help: "命令行", Action: map[string]*ice.Action{
|
||||
web.DOWNLOAD: {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(code.INSTALL, web.DOWNLOAD, m.Conf(ZSH, kit.META_SOURCE))
|
||||
}},
|
||||
gdb.BUILD: {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(code.INSTALL, gdb.BUILD, m.Conf(ZSH, kit.META_SOURCE))
|
||||
}},
|
||||
gdb.START: {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(code.INSTALL, gdb.START, m.Conf(ZSH, kit.META_SOURCE), "bin/zsh")
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmdy(code.INSTALL, path.Base(m.Conf(ZSH, kit.META_SOURCE)), arg)
|
||||
}},
|
||||
},
|
||||
})
|
||||
}
|
29
misc/bash/zsh.shy
Normal file
29
misc/bash/zsh.shy
Normal file
@ -0,0 +1,29 @@
|
||||
title "zsh"
|
||||
refer `
|
||||
官网 https://www.zsh.org/
|
||||
文档 http://zsh.sourceforge.net/Doc/Release/zsh_toc.html
|
||||
源码 https://github.com/zsh-users/zsh/
|
||||
`
|
||||
|
||||
chapter "源码"
|
||||
field zsh web.code.bash.zsh
|
||||
field zsh web.code.inner args `[ usr/install/zsh-5.8/ Src/main.c 91 ]`
|
||||
|
||||
section "构建"
|
||||
spark shell `
|
||||
yum install -y wget make gcc
|
||||
yum install -y ncurses-devel.x86_64
|
||||
|
||||
wget https://nchc.dl.sourceforge.net/project/zsh/zsh/5.8/zsh-5.8.tar.xz
|
||||
tar xvf zsh-5.8.tar.xz && cd zsh-5.8
|
||||
|
||||
./configure --prefix=$PWD/_install
|
||||
make -j8 && make install
|
||||
`
|
||||
|
||||
section "启动"
|
||||
spark shell `
|
||||
cd ./_install
|
||||
./bin/zsh
|
||||
`
|
||||
|
Loading…
x
Reference in New Issue
Block a user