1
0
mirror of https://shylinux.com/x/icebergs synced 2025-06-26 10:27:31 +08:00
This commit is contained in:
IT 老营长 @云轩领航-创始人 2023-02-28 14:08:09 +08:00
parent 9172b1d43c
commit 4cfa425690
5 changed files with 35 additions and 7 deletions

View File

@ -2,6 +2,7 @@ package cli
import ( import (
"os" "os"
"strings"
ice "shylinux.com/x/icebergs" ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/gdb" "shylinux.com/x/icebergs/base/gdb"
@ -10,8 +11,11 @@ import (
"shylinux.com/x/toolkits/logs" "shylinux.com/x/toolkits/logs"
) )
func _path_sep() string {
return kit.Select(":", ";", strings.Contains(os.Getenv(PATH), ";"))
}
func BinPath(arg ...string) string { func BinPath(arg ...string) string {
return kit.Join(kit.Simple(arg, kit.Path(ice.BIN), kit.Path(ice.USR_PUBLISH), kit.Path(ice.USR_LOCAL_BIN), kit.Path(ice.USR_LOCAL_GO_BIN), kit.Env(PATH)), ice.DF) return kit.Join(kit.Simple(arg, kit.Path(""), kit.Path(ice.BIN), kit.Path(ice.USR_PUBLISH), kit.Path(ice.USR_LOCAL_BIN), kit.Path(ice.USR_LOCAL_GO_BIN), kit.Env(PATH)), _path_sep())
} }
const FOREVER = "forever" const FOREVER = "forever"
@ -55,9 +59,13 @@ func init() {
} }
for { for {
if logs.Println("run %s", kit.Join(arg, ice.SP)); IsSuccess(m.Cmd(SYSTEM, arg)) { if logs.Println("run %s", kit.Join(arg, ice.SP)); IsSuccess(m.Cmd(SYSTEM, arg)) {
logs.Println("what %v", 123)
logs.Println(ice.EXIT) logs.Println(ice.EXIT)
break break
} }
logs.Println("what %v", 123)
m.Debug("what %v", arg)
m.Sleep("1s")
if logs.Println(); m.Config("log.save") == ice.TRUE { if logs.Println(); m.Config("log.save") == ice.TRUE {
back := kit.Format("var/log.%s", logs.Now().Format("20060102_150405")) back := kit.Format("var/log.%s", logs.Now().Format("20060102_150405"))
m.Cmd(SYSTEM, "cp", "-r", "var/log", back, ice.Maps{CMD_OUTPUT: ""}) m.Cmd(SYSTEM, "cp", "-r", "var/log", back, ice.Maps{CMD_OUTPUT: ""})

View File

@ -202,7 +202,7 @@ func init() {
} }
}}, }},
nfs.PATH: {Hand: func(m *ice.Message, arg ...string) { nfs.PATH: {Hand: func(m *ice.Message, arg ...string) {
for _, p := range strings.Split(os.Getenv(PATH), ice.DF) { for _, p := range _path_split(os.Getenv(PATH)) {
m.Push(nfs.PATH, p) m.Push(nfs.PATH, p)
} }
}}, }},

View File

@ -14,41 +14,52 @@ import (
"shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/nfs"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
"shylinux.com/x/toolkits/file" "shylinux.com/x/toolkits/file"
"shylinux.com/x/toolkits/logs"
) )
func _path_split(ps string) []string {
ps = strings.ReplaceAll(ps, "\\", "/")
return kit.Split(ps, "\n"+kit.Select(":", ";", strings.Contains(ps, ";")), "\n")
}
func _system_cmd(m *ice.Message, arg ...string) *exec.Cmd { func _system_cmd(m *ice.Message, arg ...string) *exec.Cmd {
bin, env := "", kit.Simple(m.Optionv(CMD_ENV)) bin, env := "", kit.Simple(m.Optionv(CMD_ENV))
for i := 0; i < len(env)-1; i += 2 { for i := 0; i < len(env)-1; i += 2 {
if env[i] == PATH { if env[i] == PATH {
if bin = _system_find(m, arg[0], strings.Split(env[i+1], ice.DF)...); bin != "" { logs.Println("what")
if bin = _system_find(m, arg[0], _path_split(env[i+1])...); bin != "" {
m.Logs(mdb.SELECT, "envpath cmd", bin) m.Logs(mdb.SELECT, "envpath cmd", bin)
} }
} }
} }
if bin == "" { if bin == "" {
if text := kit.ReadFile(ice.ETC_PATH); len(text) > 0 { if text := kit.ReadFile(ice.ETC_PATH); len(text) > 0 {
logs.Println("what")
if bin = _system_find(m, arg[0], strings.Split(text, ice.NL)...); bin != "" { if bin = _system_find(m, arg[0], strings.Split(text, ice.NL)...); bin != "" {
m.Logs(mdb.SELECT, "etcpath cmd", bin) m.Logs(mdb.SELECT, "etcpath cmd", bin)
} }
} }
} }
if bin == "" { if bin == "" {
logs.Println("what")
if bin = _system_find(m, arg[0], ice.BIN, m.Option(CMD_DIR)); bin != "" { if bin = _system_find(m, arg[0], ice.BIN, m.Option(CMD_DIR)); bin != "" {
m.Logs(mdb.SELECT, "contexts cmd", bin) m.Logs(mdb.SELECT, "contexts cmd", bin)
} }
} }
if bin == "" { if bin == "" {
logs.Println("what")
if bin = _system_find(m, arg[0], ice.BIN, nfs.PWD); bin != "" { if bin = _system_find(m, arg[0], ice.BIN, nfs.PWD); bin != "" {
m.Logs(mdb.SELECT, "contexts cmd", bin) m.Logs(mdb.SELECT, "contexts cmd", bin)
} }
} }
if bin == "" && !strings.Contains(arg[0], ice.PS) { if bin == "" && !strings.Contains(arg[0], ice.PS) {
logs.Println("what %s", arg[0])
if bin = _system_find(m, arg[0]); bin != "" { if bin = _system_find(m, arg[0]); bin != "" {
m.Logs(mdb.SELECT, "systems cmd", bin) m.Logs(mdb.SELECT, "systems cmd", bin)
} }
} }
if bin == "" && !strings.Contains(arg[0], ice.PS) { if bin == "" && !strings.Contains(arg[0], ice.PS) {
m.Cmd(MIRRORS, CMD, arg[0]) m.Cmd(MIRRORS, CMD, arg[0])
logs.Println("what")
if bin = _system_find(m, arg[0]); bin != "" { if bin = _system_find(m, arg[0]); bin != "" {
m.Logs(mdb.SELECT, "mirrors cmd", bin) m.Logs(mdb.SELECT, "mirrors cmd", bin)
} }
@ -56,6 +67,7 @@ func _system_cmd(m *ice.Message, arg ...string) *exec.Cmd {
if bin == "" && runtime.GOOS == WINDOWS { if bin == "" && runtime.GOOS == WINDOWS {
bin = path.Join("C:/Windows", arg[0]) bin = path.Join("C:/Windows", arg[0])
} }
logs.Println("what %s %s", bin, arg)
cmd := exec.Command(bin, arg[1:]...) cmd := exec.Command(bin, arg[1:]...)
if cmd.Dir = kit.TrimPath(m.Option(CMD_DIR)); len(cmd.Dir) > 0 { if cmd.Dir = kit.TrimPath(m.Option(CMD_DIR)); len(cmd.Dir) > 0 {
if m.Logs(mdb.PARAMS, CMD_DIR, cmd.Dir); !nfs.ExistsFile(m, cmd.Dir) { if m.Logs(mdb.PARAMS, CMD_DIR, cmd.Dir); !nfs.ExistsFile(m, cmd.Dir) {
@ -119,12 +131,17 @@ func _system_find(m Message, bin string, dir ...string) string {
return bin return bin
} }
if len(dir) == 0 { if len(dir) == 0 {
dir = append(dir, strings.Split(kit.Env(PATH), ice.DF)...) dir = append(dir, _path_split(kit.Env(PATH))...)
} }
logs.Println("what %s", dir)
for _, p := range dir { for _, p := range dir {
logs.Println("what %s", path.Join(p, bin))
if nfs.ExistsFile(m, path.Join(p, bin)) { if nfs.ExistsFile(m, path.Join(p, bin)) {
return kit.Path(p, bin) return kit.Path(p, bin)
} }
if nfs.ExistsFile(m, path.Join(p, bin)+".exe") {
return kit.Path(p, bin) + ".exe"
}
} }
return "" return ""
} }

View File

@ -117,7 +117,7 @@ func (f *Frame) parse(m *ice.Message, h, line string) string {
func (f *Frame) scan(m *ice.Message, h, line string) *Frame { func (f *Frame) scan(m *ice.Message, h, line string) *Frame {
f.ps1 = kit.Simple(m.Confv(PROMPT, kit.Keym(PS1))) f.ps1 = kit.Simple(m.Confv(PROMPT, kit.Keym(PS1)))
f.ps2 = kit.Simple(m.Confv(PROMPT, kit.Keym(PS2))) f.ps2 = kit.Simple(m.Confv(PROMPT, kit.Keym(PS2)))
m.Options(MESSAGE, m, ice.LOG_DISABLE, ice.TRUE) // m.Options(MESSAGE, m, ice.LOG_DISABLE, ice.TRUE)
m.I, m.O = f.stdin, f.stdout m.I, m.O = f.stdin, f.stdout
ps, bio := f.ps1, bufio.NewScanner(f.stdin) ps, bio := f.ps1, bufio.NewScanner(f.stdin)
for f.prompt(m, ps...); f.stdin != nil && bio.Scan(); f.prompt(m, ps...) { for f.prompt(m, ps...); f.stdin != nil && bio.Scan(); f.prompt(m, ps...) {

View File

@ -95,6 +95,9 @@ func Run(arg ...string) string {
if len(arg) == 0 && runtime.GOOS == "windows" { if len(arg) == 0 && runtime.GOOS == "windows" {
arg = append(arg, SERVE, START, DEV, DEV) arg = append(arg, SERVE, START, DEV, DEV)
} }
if len(arg) > 0 && arg[0] == "forever" && runtime.GOOS == "windows" {
arg[0] = "serve"
}
Pulse.meta[MSG_DETAIL] = arg Pulse.meta[MSG_DETAIL] = arg
kit.Fetch(kit.Sort(os.Environ()), func(env string) { kit.Fetch(kit.Sort(os.Environ()), func(env string) {
if ls := strings.SplitN(env, EQ, 2); strings.ToLower(ls[0]) == ls[0] && ls[0] != "_" { if ls := strings.SplitN(env, EQ, 2); strings.ToLower(ls[0]) == ls[0] && ls[0] != "_" {
@ -107,8 +110,8 @@ func Run(arg ...string) string {
switch Index.Merge(Index).Begin(Pulse, arg...); kit.Select("", arg, 0) { switch Index.Merge(Index).Begin(Pulse, arg...); kit.Select("", arg, 0) {
case SERVE, SPACE: case SERVE, SPACE:
if os.Getenv("ctx_log") == "" { if os.Getenv("ctx_log") == "" {
logs.Disable(true) // logs.Disable(true)
os.Stderr.Close() // os.Stderr.Close()
} }
if Index.Start(Pulse, arg...) { if Index.Start(Pulse, arg...) {
conf.Wait() conf.Wait()