Add code for forming a Redis command
This commit is contained in:
commit
c56d452dc1
|
@ -0,0 +1,60 @@
|
||||||
|
get_cmd() {
|
||||||
|
if (( $# )); then
|
||||||
|
IFS= read -ep "$(build_prompt)" "$1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
parse_cmd() {
|
||||||
|
local cmd=( ) arg
|
||||||
|
declare -n serialized=$1
|
||||||
|
|
||||||
|
route_cmd "$2"
|
||||||
|
|
||||||
|
serialized=*${#cmd[@]}$'\r\n'
|
||||||
|
serialized+=${cmd[0]^^}
|
||||||
|
|
||||||
|
for arg in "${cmd[@]:1}"; do
|
||||||
|
serialized+=$arg
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
route_cmd() {
|
||||||
|
case $1 in
|
||||||
|
[[:space:]]*)
|
||||||
|
parse_ws "$1"
|
||||||
|
;;
|
||||||
|
"")
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
parse_word "$1"
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
parse_ws() {
|
||||||
|
local line=$1
|
||||||
|
|
||||||
|
while (( ${#line} )) && [[ $line = [[:space:]]* ]]; do
|
||||||
|
line=${line:1}
|
||||||
|
done
|
||||||
|
|
||||||
|
route_cmd "$line"
|
||||||
|
}
|
||||||
|
|
||||||
|
parse_word() {
|
||||||
|
local arg line=$1
|
||||||
|
|
||||||
|
while (( ${#line} )); do
|
||||||
|
local next=${line:0:1}
|
||||||
|
|
||||||
|
if [[ $next != [[:space:]] ]]; then
|
||||||
|
arg+=$next
|
||||||
|
line=${line:1}
|
||||||
|
else
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
cmd+=( "\$${#arg}"$'\r\n'"$arg"$'\r\n' )
|
||||||
|
route_cmd "$line"
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
###
|
||||||
|
# redis sock
|
||||||
|
###
|
||||||
|
|
||||||
|
exec {sock}<>/dev/tcp/"$host"/"$port"
|
||||||
|
|
||||||
|
###
|
||||||
|
# net wrappers
|
||||||
|
###
|
||||||
|
|
||||||
|
redis_send() {
|
||||||
|
printf %s "$@" >&"$sock"
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
build_prompt() {
|
||||||
|
if (( table )); then
|
||||||
|
printf '%s:%d[%d]> ' "$host" "$port" "$table"
|
||||||
|
else
|
||||||
|
printf '%s:%d> ' "$host" "$port"
|
||||||
|
fi
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
shopt -s nullglob
|
||||||
|
|
||||||
|
for file in "${REDISH_LIB_PATH:-.}"/lib/*.sh; do
|
||||||
|
. "$file"
|
||||||
|
done
|
|
@ -0,0 +1,33 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
###
|
||||||
|
# defaults
|
||||||
|
###
|
||||||
|
|
||||||
|
host=127.0.0.1
|
||||||
|
port=6379
|
||||||
|
table=0
|
||||||
|
|
||||||
|
###
|
||||||
|
# config
|
||||||
|
###
|
||||||
|
|
||||||
|
if (( $# )); then
|
||||||
|
. "$1"
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
|
###
|
||||||
|
# library
|
||||||
|
###
|
||||||
|
|
||||||
|
. "${REDISH_LIB_PATH:-.}"/redi.sh
|
||||||
|
|
||||||
|
###
|
||||||
|
# driver
|
||||||
|
###
|
||||||
|
|
||||||
|
while get_cmd line; do
|
||||||
|
parse_cmd redis_cmd "$line"
|
||||||
|
redis_send "$redis_cmd"
|
||||||
|
done
|
Loading…
Reference in New Issue