From be6e529385bec2e7d130ce6df65a927d02a44dbe Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Thu, 4 Sep 2014 21:48:18 +0400 Subject: [PATCH 1/3] =?UTF-8?q?am=C3=A9liorer=20l'ergonomie=20des=20foncti?= =?UTF-8?q?ons=20setv(),=20setx()=20et=20seta()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ulib/base | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/lib/ulib/base b/lib/ulib/base index e54d183..852a692 100644 --- a/lib/ulib/base +++ b/lib/ulib/base @@ -107,18 +107,51 @@ function qlines() { sed "s/'/'\\\\''/g; s/.*/'&'/g" } function setv() { -# initialiser la variable $1 avec la valeur $2..* +# initialiser la variable $1 avec la valeur "$2..*" +# note: en principe, la syntaxe est 'setv var values...'. cependant, la +# syntaxe 'setv var=values...' est supportée aussi + local __s_var="$1"; shift + if [[ "$__s_var" == *=* ]]; then + set -- "${__s_var#*=}" "$@" + __s_var="${__s_var%%=*}" + fi + eval "$__s_var=\"$(qval "$*")\"" +} +function _setv() { +# Comme la fonction setv() mais ne supporte que la syntaxe '_setv var cmd args...' local __s_var="$1"; shift eval "$__s_var=\"$(qval "$*")\"" } function setx() { -# initialiser la variable $1 avec le résultat de la commande '$2..@' +# initialiser la variable $1 avec le résultat de la commande "$2..@" +# note: en principe, la syntaxe est 'setx var cmd args...'. cependant, la +# syntaxe 'setx var=cmd args...' est supportée aussi local __s_var="$1"; shift - eval "$__s_var=\"\$(\"\$@\")\"" + if [[ "$__s_var" == *=* ]]; then + set -- "${__s_var#*=}" "$@" + __s_var="${__s_var%%=*}" + fi + eval "$__s_var="'"$("$@")"' +} +function _setx() { +# Comme la fonction setx() mais ne supporte que la syntaxe '_setx var cmd args...' + local __s_var="$1"; shift + eval "$__s_var="'"$("$@")"' } function seta() { -# initialiser le tableau $1 avec le résultat de la commande '$2..@', chaque +# initialiser le tableau $1 avec le résultat de la commande "$2..@", chaque # ligne du résultat étant un élément du tableau +# note: en principe, la syntaxe est 'seta var cmd args...'. cependant, la +# syntaxe 'seta var=cmd args...' est supportée aussi + local __s_array="$1"; shift + if [[ "$__s_var" == *=* ]]; then + set -- "${__s_var#*=}" "$@" + __s_var="${__s_var%%=*}" + fi + eval "$__s_array=($("$@" | qlines))" +} +function _seta() { +# Comme la fonction seta() mais ne supporte que la syntaxe '_seta var cmd args...' local __s_array="$1"; shift eval "$__s_array=($("$@" | qlines))" } From 4a2581cd2e207b32aa6b0cd5ba3aefbf6672fca9 Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Thu, 4 Sep 2014 21:49:37 +0400 Subject: [PATCH 2/3] bug --- lib/ulib/base | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/ulib/base b/lib/ulib/base index 852a692..3513247 100644 --- a/lib/ulib/base +++ b/lib/ulib/base @@ -144,9 +144,9 @@ function seta() { # note: en principe, la syntaxe est 'seta var cmd args...'. cependant, la # syntaxe 'seta var=cmd args...' est supportée aussi local __s_array="$1"; shift - if [[ "$__s_var" == *=* ]]; then - set -- "${__s_var#*=}" "$@" - __s_var="${__s_var%%=*}" + if [[ "$__s_array" == *=* ]]; then + set -- "${__s_array#*=}" "$@" + __s_array="${__s_array%%=*}" fi eval "$__s_array=($("$@" | qlines))" } From b0dd82e993a1e177657bbb4af07d5cd024a0f79e Mon Sep 17 00:00:00 2001 From: Jephte CLAIN Date: Fri, 5 Sep 2014 07:28:09 +0400 Subject: [PATCH 3/3] =?UTF-8?q?impl=C3=A9mentation=20initiale=20evalx()?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ulib/base | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/lib/ulib/base b/lib/ulib/base index 3513247..c8c9693 100644 --- a/lib/ulib/base +++ b/lib/ulib/base @@ -155,6 +155,47 @@ function _seta() { local __s_array="$1"; shift eval "$__s_array=($("$@" | qlines))" } +function evalx() { +# évaluer ... + local val arg r=0 + local -a cmd + + local first=1 + while [ $# -gt 0 ]; do + cmd=() + while [ $# -gt 0 ]; do + arg="$1"; shift + [ "$arg" == // ] && break + if [ "${arg%//}" != "$arg" ]; then + local tmp="${arg%//}" + if [ -z "${tmp//\\/}" ]; then + arg="${arg#\\}" + cmd=("${cmd[@]}" "$arg") + continue + fi + fi + cmd=("${cmd[@]}" "$arg") + done + + if [ -n "$first" ]; then + val="$("${cmd[@]}")" || r=$? + else + val="$("${cmd[@]}" "$val")" || r=$? + fi + first= + done + [ -n "$val" ] && echo "$val" + return $r +} +function evalp() { +# évaluer ... + : +} +function testx() { +# tester ... + : +} + function e2of() { # lancer la commande $@ en redirigeant la sortie d'erreur sur la sortie standard "$@" 2>&1