WIP
This commit is contained in:
parent
de980bb045
commit
ff50b3c280
|
@ -0,0 +1,30 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
_nesto_dir="$(dirname $(readlink -f $0))"
|
||||
source "$_nesto_dir/types.sh"
|
||||
|
||||
|
||||
Array clock_anim=(🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘 🕙 🕚 🕛 🕜 🕝 🕞 🕟 🕠 🕡 🕢 🕣 🕤 🕥 🕦 🕧)
|
||||
Map status_icons=([running]=⚫ [stopped]=⚪ [template]="☢️ " [other]="✔️☑️🔘⚪⚫🔴🔵🔺🔻🔸🔹🔶🔷🔳🔲▪️▫️◾◽◼️⬛⬜☢️📻⏰⌛️⏳📡🔋🔌💡💰🔧🔑✉️📩📨📧💌📥📤📦📜📃📄📑📊📈📉📆📅📇📋📁📂📰📓📔📚📖🔖🔗📎📐📏📌📍📝🔍🔎🔏🔐🔒🔓🎭🎨🎬🎤🎧🎼🎹🎷🎺🎸🎻🎲♟🎯🎮🔈🔇🔉🔊🔔🔕📣📢💬💭♠️♣️♥️♦️" )
|
||||
Map status_colors=([running]=$c_green [stopped]=$c_dark$c_red [template]=$c_yellow )
|
||||
|
||||
spinning=""
|
||||
s=1
|
||||
spinner()
|
||||
{
|
||||
s=$[$s+1]
|
||||
local i=$[$s%100]
|
||||
if [[ -n $spinning ]]
|
||||
then
|
||||
if [[ $i == 0 ]]
|
||||
then
|
||||
printf "${clock_anim[$1]} $s\r"
|
||||
[[ $1 < ${#clock_anim[@]} ]] && spinner $[$1+1] || spinner 1
|
||||
else
|
||||
spinner $1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
spinning=true
|
||||
spinner
|
|
@ -0,0 +1,23 @@
|
|||
#!/usr/bin/awk -f
|
||||
NR==1 {}
|
||||
NR==2 {
|
||||
head=""
|
||||
color=""
|
||||
format=""
|
||||
for(i=1; i<=NF; i++)
|
||||
{
|
||||
name=$i
|
||||
col=$i
|
||||
fmt=$i
|
||||
gsub( /\|.*$/,"", name )
|
||||
head=head name"="i";"
|
||||
|
||||
# gsub( /^name/, "", col )
|
||||
# gsub( /%.*$/, "", col )
|
||||
# color=color"c_"name"=\""col"\";"
|
||||
|
||||
gsub( /^[^|]*\|/, "", fmt )
|
||||
format=format"f"name"=\""fmt"\";"
|
||||
}
|
||||
print "NR==1{} NR==2{"head" "format"}"
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
#!/usr/bin/awk -f
|
||||
NR==1 {}
|
||||
NR==2 {
|
||||
names=""
|
||||
colors=""
|
||||
formats=""
|
||||
for(i=1; i<=NF; i++)
|
||||
{
|
||||
name=$i
|
||||
col=$i
|
||||
fmt=$i
|
||||
gsub(/%[\-0-9.*a-z]*\s/,"",name)
|
||||
head=head$i"="i";"
|
||||
gsub(/^[^%]*%/,"%",col)
|
||||
format=format"f"$i"=\""col"\";"
|
||||
}
|
||||
print "NR==1{} NR==2{"head" "format"}"
|
||||
}
|
|
@ -0,0 +1,276 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
_nesto_dir="$(dirname $(readlink -f $0))"
|
||||
#echo "$_nesto_dir/types.sh"
|
||||
source "$_nesto_dir/types.sh"
|
||||
|
||||
_model="$(dirname $0)/model.awk"
|
||||
|
||||
echo args: $0 $@
|
||||
|
||||
#source easyoptions
|
||||
|
||||
_DB="$1"
|
||||
|
||||
|
||||
# sawk '$name=/dig$/i'
|
||||
# sawk dig
|
||||
# sawk '$num>150'
|
||||
search()
|
||||
{
|
||||
autoload
|
||||
DB=~/dev/nesto/DB
|
||||
|
||||
# Find if 1st arg is a number
|
||||
case $1 in
|
||||
''|*[!0-9]*) re=$1 ;;
|
||||
*) re="^$1 " ;;
|
||||
esac
|
||||
|
||||
columns="$(for col in ${@:2}; do printf "\$$col," | sed 's/%.*,//'; done | sed 's/,$//')"
|
||||
# columns=$(echo ${@:2} | awk 'BEGIN{RS=" ";ORS=",o"}{ print "$"$0 }')
|
||||
echo "(${@:2})"
|
||||
echo "[$columns]"
|
||||
format="$(for col in ${@:2}; do printf "cpurple f$col\" \""; done)"
|
||||
echo "{$format}"
|
||||
echo $($_model $DB)" NR > 1 && /$re/i {printf $format, $columns}" $vmdb
|
||||
awk "$($_model $DB) NR > 1 && tolower(\$0) ~ /$re/ {printf $format\"\\n\", $columns}" cpurple=$c_purple c=$c_ $vmdb
|
||||
#'{printf "%-10s %-30s %-10s\n", cp $1, cs $2, c ct $4 c }' cs=$c_status ct=$c_type cp=$c_purple cg=$c_green gr=$c_white cd=$c_dark c=$c_
|
||||
|
||||
}
|
||||
|
||||
each()
|
||||
{
|
||||
Object arr=$(exp $1)
|
||||
String tpl="$(printf "$2" | sed 's/"/\"/')"
|
||||
# debug arr tpl
|
||||
for i in "${!arr[@]}"; do eval "echo -ne \"$tpl\""; done
|
||||
}
|
||||
#tests=(aze qsd wxc)
|
||||
|
||||
#each tests '
|
||||
# $i) $c_cyan${tests[$i]}$c_'
|
||||
|
||||
c0=$c_light$c_black
|
||||
|
||||
Map status_icons=([running]=⚫ [stopped]=⚪ [template]="☢️ " )
|
||||
#[other]="✔️☑️🔘⚪⚫🔴🔵🔺🔻🔸🔹🔶🔷🔳🔲▪️▫️◾◽◼️⬛⬜☢️📻⏰⌛️⏳📡🔋🔌💡💰🔧🔑✉️📩📨📧💌📥📤📦📜📃📄📑📊📈📉📆📅📇📋📁📂📰📓📔📚📖🔖🔗📎📐📏📌📍📝🔍🔎🔏🔐🔒🔓🎭🎨🎬🎤🎧🎼🎹🎷🎺🎸🎻🎲♟🎯🎮🔈🔇🔉🔊🔔🔕📣📢💬💭♠️♣️♥️♦️" )
|
||||
Map status_colors=([running]=$c_green [stopped]=$c_dark$c_red [template]=$c_yellow )
|
||||
|
||||
|
||||
tester()
|
||||
{
|
||||
# eval "declare -A vm="${1#*=}
|
||||
Map vm=$1
|
||||
Array domains=${vm[domains]}
|
||||
debug vm domains
|
||||
echo -e "$c0
|
||||
┌───┤ ${status_colors[${vm[status]}]}${status_icons[${vm[status]}]}$c0${c_light}VM n°$c_purple${vm[num]}$c0 ├────────────────────┐
|
||||
│ │
|
||||
│ VM n°$c_red${vm[num]}$c0
|
||||
│ Name: $c_green${vm[name]}$c0
|
||||
│ Status: ${status_colors[${vm[status]}]}${vm[status]}$c0
|
||||
│ Type: $c_yellow${vm[type]}$c0
|
||||
│ Domains: $(each domains '
|
||||
│ $i) $c_cyan${domains[$i]}$c0'
|
||||
)
|
||||
│ │
|
||||
└─────────────────────────────────────┘
|
||||
"$c_
|
||||
}
|
||||
|
||||
inter()
|
||||
{
|
||||
Map vm=$1
|
||||
Array domains=${vm[domains]}
|
||||
debug vm domains
|
||||
|
||||
whiptail --title "VM n°${vm[num]}" \
|
||||
--msgbox " │
|
||||
VM n°$c_red${vm[num]}
|
||||
Name: $c_green${vm[name]}
|
||||
Status: ${vm[status]}
|
||||
Type: ${vm[type]}
|
||||
Domains: $(each domains '
|
||||
$i) ${domains[$i]}'
|
||||
)
|
||||
" 16 78
|
||||
#--menu "Search for 'dig' \nMatched Vm(s)" 16 78 10 aze "" qsd "" wxc ""
|
||||
}
|
||||
|
||||
compact()
|
||||
{
|
||||
Map vm=$1
|
||||
Array domains=${vm[domains]}
|
||||
# debug vm domains
|
||||
local c0=${status_colors[${vm[status]}]}
|
||||
echo -e "$c0$c_light${status_colors[${vm[status]}]}${status_icons[${vm[status]}]}$c0$c_purple${vm[num]}$c0 $(printf '%-30s' "${vm[name]}") $c_yellow${vm[type]}"$c_
|
||||
|
||||
}
|
||||
|
||||
|
||||
_VM()
|
||||
{
|
||||
printf "([num]=$1 [name]=$2 [status]=$3 [type]=$4)"
|
||||
}
|
||||
array2map "(num* name status type)" "(111 dig-docker running KVM)"
|
||||
model=(key* value)
|
||||
array2map "`exp model`" "(active true)"
|
||||
|
||||
#alias VM='declare -A '
|
||||
#VM vm_temp= "(111 dig-docker running KVM)"
|
||||
|
||||
sVM="111 dig-docker running KVM"
|
||||
_VM 111 dig-docker running KVM
|
||||
_VM $sVM
|
||||
Map vm1=`_VM $sVM`
|
||||
exp vm1
|
||||
|
||||
|
||||
echo ho ho ho nesto
|
||||
|
||||
_db2array()
|
||||
{
|
||||
local sArr="($(awk '$0 !~ /^#!/ {printf "\"%s\" ",$0}' $1))"
|
||||
# debug sArr
|
||||
Array lines=$sArr
|
||||
# debug lines
|
||||
# debug lines[0]
|
||||
# Map cols=${arr[0]}
|
||||
# debug cols
|
||||
# echo "${lines[0]}"
|
||||
Array columns_line=(${lines[0]})
|
||||
# debug columns_line
|
||||
Array columns_order=()
|
||||
for i in ${!columns_line[@]}
|
||||
do
|
||||
# echo "(${columns_line[$i]})"
|
||||
Object field="(${columns_line[$i]})"
|
||||
# exp field
|
||||
# echo ${!field[@]}
|
||||
columns_order[$i]=${!field[@]}
|
||||
done
|
||||
Map columns="(${lines[0]})"
|
||||
columns[_order]="(${columns_order[@]})"
|
||||
# eval "Map cols=( ${_columns_line[@]} )"
|
||||
# debug columns columns_order
|
||||
Array DB=("`exp columns`")
|
||||
for line in "${lines[@]:1}"
|
||||
do
|
||||
line=$(echo "$line" | sed 's/(/"(/' | sed 's/)/)"/')
|
||||
Object item=$(array2map "${columns[_order]}" "(${line})")
|
||||
# debug item
|
||||
DB+=("$(exp item)")
|
||||
done
|
||||
# debug DB
|
||||
exp DB
|
||||
}
|
||||
|
||||
render()
|
||||
{
|
||||
_db2array $_nesto_dir/new-test.db
|
||||
Array DB1=$(_db2array $_nesto_dir/new-test.db)
|
||||
debug DB1
|
||||
|
||||
for i in ${!DB1[@]}
|
||||
do
|
||||
[[ $i == 0 ]] && continue
|
||||
# Map first=${DB1[$i]}
|
||||
# debug first
|
||||
$1 "${DB1[$i]}"
|
||||
done
|
||||
}
|
||||
|
||||
create()
|
||||
{
|
||||
fields=($@)
|
||||
echo $0 laaaa
|
||||
#eval ``
|
||||
# echo "#!/home/dig/dev/nesto/nesto"
|
||||
echo "#!/usr/bin/env nestor"
|
||||
for i in ${!fields[@]}
|
||||
do
|
||||
case ${fields[$i]} in
|
||||
\[*\]) printf %s "${fields[$i]}= " ;;
|
||||
\[*) printf %s "${fields[$i]} " ;;
|
||||
[^[]*) printf %s "[${fields[$i]}]= " ;;
|
||||
[^[\]]=*) printf "[%s]=%s " "$(echo ${fields[$i]} | awk -F= '{print $1}')" "$(echo ${fields[$i]} | awk -F= '{print $1}')" ;;
|
||||
*) printf %s "[errors]=\"(\\\"Field not well formated: ${fields[$i]}\\\")\" " ;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
show()
|
||||
{
|
||||
if [ -n $DB ]
|
||||
then
|
||||
cat $DB
|
||||
fi
|
||||
}
|
||||
|
||||
add()
|
||||
{
|
||||
Array items=("$@")
|
||||
exp items
|
||||
for arg in "$@"
|
||||
do
|
||||
Object item=$arg #{items[$i]}
|
||||
Array aItem=()
|
||||
exp item
|
||||
for col in "${columns[@]}"
|
||||
do
|
||||
local val="${item[$col]}"
|
||||
[[ -z "$val" ]] && val="-"
|
||||
aItem+="$val "
|
||||
done
|
||||
exp aItem
|
||||
echo "${aItem[@]}" >> $DB
|
||||
done
|
||||
}
|
||||
|
||||
[[ -t 1 ]] && isPiped="" || isPiped=true
|
||||
hasPipe=""
|
||||
pipe=""
|
||||
|
||||
if [ -t 0 ]; then
|
||||
echo running interactivelly
|
||||
else
|
||||
hasPipe=true
|
||||
read -d \0 pipe
|
||||
fi
|
||||
debug isPiped hasPipe pipe
|
||||
|
||||
Array args=()
|
||||
for arg in "$@"
|
||||
do
|
||||
args+=("$arg")
|
||||
done
|
||||
|
||||
debug args
|
||||
|
||||
#Array args=($@)
|
||||
DB=""
|
||||
[[ -r $1 ]] && echo "in db" || echo direct
|
||||
|
||||
if [ -r $1 ]
|
||||
then
|
||||
DB=$args
|
||||
args=("${args[@]:1}")
|
||||
|
||||
_columns_line=($(cat $DB | awk 'NR==2{print $0" "}'))
|
||||
Array columns=()
|
||||
for i in ${!_columns_line[@]}
|
||||
do
|
||||
Object field="(${_columns_line[$i]})"
|
||||
# exp field
|
||||
# echo ${!field[@]}
|
||||
columns[$i]=${!field[@]}
|
||||
done
|
||||
eval "Map cols=( ${_columns_line[@]} )"
|
||||
debug columns cols
|
||||
fi
|
||||
debug args
|
||||
|
||||
echo calling: ${args[0]} ${args[@]:1}
|
||||
|
||||
${args[0]} "${args[@]:1}"
|
|
@ -0,0 +1,138 @@
|
|||
#!/bin/bash
|
||||
|
||||
## nesto v0.1.0
|
||||
## Copyright (C) p2p.legal, Thomas Di gregorio
|
||||
## Licensed under MIT
|
||||
##
|
||||
## This is the tool to facilitate working on several small text databases.
|
||||
## Usage:
|
||||
## nesto [options] <file.db> COMMAND <data>
|
||||
## <data> | nesto [options] <file.db>
|
||||
## <file.db> COMMAND <data>
|
||||
## <data> | <file.db> COMMAND
|
||||
##
|
||||
## Options:
|
||||
## ( Long version are mandatory, and can be before or after short version )
|
||||
##
|
||||
## -h, --help Show this help.
|
||||
## -v, --verbose Show sub-task resolution and options parsed.
|
||||
## -s, --silent Hide text output.
|
||||
## -y, --yes Answer yes to questions (Dangerous).
|
||||
## --all=<val> Display all VMs
|
||||
##
|
||||
##
|
||||
|
||||
source $(dirname $0)/types.sh
|
||||
_model="$(dirname $0)/model.awk"
|
||||
|
||||
# Parse options and replace defaults
|
||||
source easyoptions || exit
|
||||
|
||||
verbose(){ [[ "$verbose" == "yes" ]] && echo $@; }
|
||||
_debug(){ [[ "$verbose" == "yes" ]] && for arg in $@;do declare -p $arg 2>/dev/null; done; }
|
||||
|
||||
_debug verbose silent yes all arguments
|
||||
|
||||
|
||||
DB=${arguments[0]}
|
||||
|
||||
|
||||
#if [ -t 1 ] ; then echo terminal; else echo "not a terminal"; fi
|
||||
#returns "terminal", because the output is sent to your terminal, whereas
|
||||
#(if [ -t 1 ] ; then echo terminal; else echo "not a terminal"; fi) | cat
|
||||
|
||||
[[ -t 1 ]] && is_piped="" || is_piped="yes"
|
||||
#[[ -n $piped ]] && echo "will be piped"
|
||||
#[[ -z $piped ]] && echo "will be printed directly"
|
||||
|
||||
|
||||
|
||||
|
||||
add()
|
||||
{
|
||||
verbose "add row $@"
|
||||
}
|
||||
|
||||
upd()
|
||||
{
|
||||
verbose "update $@"
|
||||
}
|
||||
|
||||
del()
|
||||
{
|
||||
verbose "delete $@"
|
||||
}
|
||||
|
||||
_qry()
|
||||
{
|
||||
case $1 in
|
||||
*\&\&*|*\$*|*\|\|*) echo "$1" ;;
|
||||
*=*) echo "\$$(echo $1 | sed 's/=/=="/')\"" ;;
|
||||
*~*) echo "\$$(echo "$1" | sed 's|~|~/|')/" ;;
|
||||
*[!0-9]*) echo "tolower(\$0) ~ /$1/" ;;
|
||||
*[0-9]*) echo "\$1==$1" ;;
|
||||
*) echo "$1" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
qry()
|
||||
{
|
||||
verbose "search for $@"
|
||||
|
||||
# Find if 1st arg is a number
|
||||
# case $1 in
|
||||
# *\&\&*|*\$*|*\|\|*) q="$1" ;;
|
||||
# *=*) q="\$$(echo $1 | sed 's/=/=="/')\"" ;;
|
||||
# *~*) q="\$$(echo "$1" | sed 's|~|~/|')/" ;;
|
||||
# *[!0-9]*) q="tolower(\$0) ~ /$1/" ;;
|
||||
# *[0-9]*) q="\$1==$1" ;;
|
||||
# *) q="$1" ;;
|
||||
# esac
|
||||
q=$(_qry "$1")
|
||||
_debug q
|
||||
verbose "query: $q"
|
||||
|
||||
verbose "model: $($_model $DB)"
|
||||
|
||||
[[ -n $verbose ]] && declare -p arguments
|
||||
verbose "(${@:2})"
|
||||
|
||||
columns="$(for col in ${@:2}; do printf "\$$col," | sed 's/|.*,//'; done | sed 's/,$//')"
|
||||
# columns=$(echo ${@:2} | awk 'BEGIN{RS=" ";ORS=",o"}{ print "$"$0 }')
|
||||
verbose "[$columns]"
|
||||
|
||||
format="$(for col in ${@:2}; do name=$(echo $col | sed 's/|.*//'); printf "cdefault f$name c\" \""; done)"
|
||||
verbose "{$format}"
|
||||
|
||||
verbose $($_model $DB)" NR > 2 && $q {printf $format\"\\n\", $columns}" cdefault=$c_light c=$c_ $DB
|
||||
awk "$($_model $DB) NR > 2 && $q {printf $format\"\\n\", $columns}" cdefault=$c_light$c_black c=$c_ $DB
|
||||
|
||||
#'{printf "%-10s %-30s %-10s\n", cp $1, cs $2, c ct $4 c }' cs=$c_status ct=$c_type cp=$c_purple cg=$c_green gr=$c_white cd=$c_dark c=$c_
|
||||
|
||||
|
||||
}
|
||||
|
||||
_render()
|
||||
{
|
||||
eval `Object cols= $1`
|
||||
echo '_render'
|
||||
exp cols
|
||||
columns="$(for col in ${@:2}; do printf "\$$col," | sed 's/|.*,//'; done | sed 's/,$//')"
|
||||
# columns=$(echo ${@:2} | awk 'BEGIN{RS=" ";ORS=",o"}{ print "$"$0 }')
|
||||
verbose "[$columns]"
|
||||
|
||||
|
||||
format="$(for col in ${@:2}; do name=$(echo $col | sed 's/|.*//'); printf "cdefault f$name c\" \""; done)"
|
||||
verbose "{$format}"
|
||||
|
||||
echo "{printf $format\"\\n\", $columns}"
|
||||
}
|
||||
|
||||
exp arguments
|
||||
eval `Array rest= \( ${arguments[@]:2} \)`
|
||||
exp rest
|
||||
|
||||
|
||||
[[ $is_piped == "" ]] && qry ${arguments[1]} | _render "`exp rest`"
|
||||
[[ $is_piped == "yes" ]] && qry ${arguments[1]}
|
||||
#qry ${arguments[@]:1}
|
|
@ -0,0 +1,4 @@
|
|||
#!/home/dig/dev/nesto/opener
|
||||
id name status
|
||||
1 root open
|
||||
2 dig pété
|
|
@ -0,0 +1,6 @@
|
|||
#!/usr/bin/env nestor
|
||||
[num]= [name]= [status]= [type]= [domains]=
|
||||
111 dig-docker running KVM (devingfx.com ipfs.io exemple.com *.devingfx.com git.p2p.legal)
|
||||
147 odoo template LXC (odoo12-test.p2P.legal)
|
||||
106 docker running KVM (accounts.p2P.legal)
|
||||
888 aze stopped - ()
|
|
@ -0,0 +1,5 @@
|
|||
#!/home/dig/dev/nesto/opener
|
||||
id|%3s name|\033[32m%-30s type|\033[33m%3s status|%-10s branch|%-10s domains|\033[36m%-100s
|
||||
111 svp-docker-dig LXC running staff www.devingfx.com:ipfs.devingfx.com
|
||||
106 p2p-docker KVM running docker dalp.p2p.legal:mail.samourai.coop
|
||||
123 svp-odoo-fred-copylaradio LXC stopped
|
|
@ -0,0 +1,159 @@
|
|||
#!/bin/bash
|
||||
|
||||
verbose=yes
|
||||
source ./types.sh
|
||||
|
||||
echo '--Assoc--'
|
||||
|
||||
sAss="([ert]= [dd]=\"toto\" [blo]=true)"
|
||||
Map obj=(
|
||||
[ert]=
|
||||
[dd]="toto"
|
||||
[blo]=true
|
||||
)
|
||||
Map ass=$sAss
|
||||
debug obj ass
|
||||
|
||||
echo '--Array--'
|
||||
|
||||
sArr="(a b c d e f)"
|
||||
Array arr1=(a b c d e f)
|
||||
Array arr2=$sArr
|
||||
|
||||
arrA=(a b c d e f)
|
||||
arrB=(
|
||||
a
|
||||
b c
|
||||
d
|
||||
e
|
||||
f
|
||||
)
|
||||
|
||||
debug arr1 arr2 arrA arrB
|
||||
|
||||
sss=sss
|
||||
debug sss
|
||||
|
||||
echo '--String--'
|
||||
|
||||
sss=sss
|
||||
debug sss
|
||||
|
||||
ss1=ss1
|
||||
ss2="ss2"
|
||||
sStr="\"str\""
|
||||
String ss3="ss3"
|
||||
String ss3b=ss3b
|
||||
String ss4b=$sStr
|
||||
String ss4="$sStr"
|
||||
|
||||
debug ss1 ss2 ss3 ss3b ss4 ss4b
|
||||
|
||||
echo '--Objects--'
|
||||
|
||||
Map toto=( [id]= [velo]= [9]=9 )
|
||||
|
||||
Map vm=( [id]=111 [name]=dig-docker [status]=running )
|
||||
|
||||
aze=(toto titi tata)
|
||||
declare -p aze
|
||||
debug aze
|
||||
echo 'laaa'
|
||||
|
||||
Object hyb ${aze[@]}
|
||||
|
||||
|
||||
Array list=(aze qsd wxc)
|
||||
|
||||
debug list toto vm
|
||||
|
||||
echo '--Function arguments--'
|
||||
|
||||
my-func()
|
||||
{
|
||||
echo "brut($#): $@"
|
||||
echo "brut: $1"
|
||||
echo "brut: $2"
|
||||
|
||||
Object arg1=$1
|
||||
declare -p arg1
|
||||
arg1+=([rrr]=R [ttt]=T [yyy]=Y)
|
||||
declare -p arg1
|
||||
arg1+=([name]=NAME)
|
||||
declare -p arg1
|
||||
for a in "${!arg1[@]}"; do echo "elem: ${arg1[$a]}"; done
|
||||
|
||||
Array arg2=$2
|
||||
declare -p arg2
|
||||
arg2+=(rrr ttt yyy)
|
||||
declare -p arg2
|
||||
for a in "${!arg2[@]}"; do echo "elem: ${arg2[$a]}"; done
|
||||
}
|
||||
|
||||
my-func "`exp vm`" "`exp aze`"
|
||||
|
||||
|
||||
|
||||
|
||||
#if [ -t 1 ] ; then echo terminal; else echo "not a terminal"; fi
|
||||
#returns "terminal", because the output is sent to your terminal, whereas
|
||||
#(if [ -t 1 ] ; then echo terminal; else echo "not a terminal"; fi) | cat
|
||||
|
||||
[[ -t 1 ]] && is_piped="" || is_piped="yes"
|
||||
#[[ -n $piped ]] && echo "will be piped"
|
||||
#[[ -z $piped ]] && echo "will be printed directly"
|
||||
|
||||
|
||||
array2map "(num* name status type)" "(111 dig-docker running KVM)"
|
||||
model=(key* value)
|
||||
array2map "`exp model`" "(active true)"
|
||||
|
||||
#alias VM='declare -A '
|
||||
#VM vm_temp= "(111 dig-docker running KVM)"
|
||||
|
||||
sVM="111 dig-docker running KVM"
|
||||
_VM 111 dig-docker running KVM
|
||||
_VM $sVM
|
||||
Map vm1=`_VM $sVM`
|
||||
debug vm1
|
||||
|
||||
|
||||
Object test=([key]=aze [value]=fooo)
|
||||
#declare -A test=([key]=aze [value]=fooo)
|
||||
debug test
|
||||
echo looollo
|
||||
|
||||
sTest=`declare -p test`
|
||||
list=(aze qsd "${sTest#*=}" wxc)
|
||||
exp list
|
||||
exp list[0]
|
||||
exp list[2]
|
||||
exp list[2].value
|
||||
|
||||
echo ho ho ho
|
||||
|
||||
toString()
|
||||
{
|
||||
printf "1) %s\n2) %s\n" $1 $2
|
||||
local aze=(); local foo=(coucou monde)
|
||||
echo "${foo[@]} !"
|
||||
}
|
||||
Map obj=(
|
||||
[num]=1
|
||||
[name]=bob
|
||||
[status]=chill
|
||||
[type]=KVN
|
||||
[toString]='obj_toString()
|
||||
{
|
||||
Object this=$1
|
||||
'"`declare -f toString | awk 'NR>1{print}'`;
|
||||
obj_toString "
|
||||
)
|
||||
debug obj
|
||||
|
||||
#obj[arrmap]='{ Object this=$1; '"${obj[arrmap]#{};"'obj_arrmap '
|
||||
echo "${obj[toString]}"
|
||||
${obj[toString]}
|
||||
echo "${obj[toString]} '([name]=toto)'"
|
||||
eval "${obj[toString]} '([name]=toto)'"
|
||||
|
|
@ -0,0 +1,134 @@
|
|||
shopt -s expand_aliases
|
||||
|
||||
alias Object='declare -A'
|
||||
alias Map='declare -A'
|
||||
alias Array='declare -a'
|
||||
alias Int='declare -i'
|
||||
alias String='declare'
|
||||
|
||||
debug()
|
||||
{
|
||||
for var in "$@"
|
||||
do echo -e $c_purple$var$c_="`exp $var`"
|
||||
done
|
||||
}
|
||||
|
||||
#exp(){ src="$(declare -p $1)"; echo "${src#*=}"; }
|
||||
exp()
|
||||
{
|
||||
# echo ""
|
||||
# echo ""
|
||||
echo "Expose $@"
|
||||
local path=($(echo "$@" | awk -F '[[\].]' '{for(i=1;i<=NF;i++){printf "%s ", $i}; printf "\n"}'))
|
||||
# declare -p path
|
||||
# local cur="$(declare -p ${path[0]})"
|
||||
|
||||
local src="$(declare -p $path)"
|
||||
src="${src#*=}"
|
||||
Object obj=$src
|
||||
# local cur=($path)
|
||||
path=(${path[@]:1})
|
||||
# declare -p obj
|
||||
|
||||
while [[ -n $path ]]
|
||||
do
|
||||
# echo "while) " $path "${obj[$path]}"
|
||||
|
||||
# cur+=$path
|
||||
src=${obj[$path]}
|
||||
Object obj=$src
|
||||
# declare -p obj
|
||||
# src="$(declare -p obj)"
|
||||
# src="${src#*=}"
|
||||
# declare -p src
|
||||
# obj=$src
|
||||
path=(${path[@]:1})
|
||||
done
|
||||
|
||||
# src="$(declare -p cur)"
|
||||
echo "$src"
|
||||
}
|
||||
|
||||
function exp()
|
||||
{
|
||||
declare -p $1 | sed 's/^declare -. [^=]*=//' # | sed 's/)$//'
|
||||
}
|
||||
|
||||
|
||||
|
||||
function Object()
|
||||
{
|
||||
# echo o
|
||||
case "${@:2}" in
|
||||
\"*) String $1 ${@:2} ;;
|
||||
\(\[[0-9]*) Array $1 ${@:2} ;;
|
||||
\(\[*) Assoc $1 ${@:2} ;;
|
||||
*) echo "declare $1${@:2}"
|
||||
esac
|
||||
}
|
||||
|
||||
function tg()
|
||||
{
|
||||
src="${@:2}"
|
||||
is_str=`echo "${@:2}" | grep -v '^".*"$'`
|
||||
is_arr=`echo "${@:2}" | grep -v '^\(\['`
|
||||
is_arr=$is_arr`echo "${@:2}" | grep '^\[[0-9]*\]='`
|
||||
[[ -z $is_arr ]] && echo "declare -A $1=(${@:2})" || echo "declare -a $1=(${@:2})"
|
||||
}
|
||||
|
||||
#Assoc()
|
||||
#{
|
||||
# echo "declare -A $1${@:2}"
|
||||
#}
|
||||
|
||||
|
||||
#function Array()
|
||||
#{
|
||||
# echo "declare -a $1${@:2}"
|
||||
#}
|
||||
|
||||
|
||||
#function String()
|
||||
#{
|
||||
# echo "declare $1${@:2}"
|
||||
#}
|
||||
|
||||
map2keys()
|
||||
{
|
||||
Map obj=$1
|
||||
for key in ${obj[@]}
|
||||
do echo $key
|
||||
done
|
||||
}
|
||||
|
||||
array2map()
|
||||
{
|
||||
Array fields=$1
|
||||
Array values=$2
|
||||
Map result=()
|
||||
for i in ${!fields[@]}
|
||||
do
|
||||
result[${fields[$i]}]=${values[$i]}
|
||||
done
|
||||
exp result
|
||||
}
|
||||
|
||||
map2json()
|
||||
{
|
||||
# eval $1
|
||||
Map data=$1
|
||||
printf "{"
|
||||
for key in ${!data[@]}
|
||||
do
|
||||
printf '"%s":' $key
|
||||
case "${data[$key]}" in
|
||||
true|false|yes|no)printf '%s' "${data[$key]}" ;;
|
||||
[0-9.,]) printf '%s' "${data[$key]}" ;;
|
||||
*) printf '"%s"' "${data[$key]}" ;;
|
||||
esac
|
||||
printf ","
|
||||
# printf '"%s",' "${data[$key]}"
|
||||
done | sed 's/,$//'
|
||||
printf "}"
|
||||
}
|
||||
|
Loading…
Reference in New Issue