diff --git a/backend/services/cli_service.go b/backend/services/cli_service.go index 4f0a0fc..bb8c462 100644 --- a/backend/services/cli_service.go +++ b/backend/services/cli_service.go @@ -2,6 +2,7 @@ package services import ( "context" + "errors" "fmt" "github.com/redis/go-redis/v9" "github.com/wailsapp/wails/v2/pkg/runtime" @@ -41,12 +42,12 @@ func Cli() *cliService { } func (c *cliService) runCommand(server, data string) { - if cmds := strings.Split(data, " "); len(cmds) > 0 && len(cmds[0]) > 0 { + if cmds := strutil.SplitCmd(data); len(cmds) > 0 && len(cmds[0]) > 0 { if client, err := c.getRedisClient(server); err == nil { args := sliceutil.Map(cmds, func(i int) any { return cmds[i] }) - if result, err := client.Do(c.ctx, args...).Result(); err == nil || err == redis.Nil { + if result, err := client.Do(c.ctx, args...).Result(); err == nil || errors.Is(err, redis.Nil) { if strings.ToLower(cmds[0]) == "select" { // switch database if db, ok := strutil.AnyToInt(cmds[1]); ok { diff --git a/backend/utils/string/any_convert.go b/backend/utils/string/any_convert.go index 206f27e..008e48e 100644 --- a/backend/utils/string/any_convert.go +++ b/backend/utils/string/any_convert.go @@ -2,7 +2,9 @@ package strutil import ( "encoding/json" + "regexp" "strconv" + "strings" sliceutil "tinyrdm/backend/utils/slice" ) @@ -129,3 +131,16 @@ func AnyToString(value interface{}, prefix string, layer int) (s string) { // // return output.String(), true //} + +func SplitCmd(cmd string) []string { + re := regexp.MustCompile(`'[^']+'|"[^"]+"|\S+`) + args := re.FindAllString(cmd, -1) + return sliceutil.FilterMap(args, func(i int) (string, bool) { + arg := strings.Trim(args[i], "\"") + arg = strings.Trim(arg, "'") + if len(arg) <= 0 { + return "", false + } + return arg, true + }) +}