nutools/lib/nulib/TODO.md

4.7 KiB

TODO

Améliorer rtoinst

ajouter le support de pffprofile pour deploydb

Refaire/repenser les fonctions evalX

dans chaque exemple, on affiche l'invocation de evalX suivi de l'équivalent en syntaxe standard

  • evala permet de traiter des tableaux

    evala with array // add a b c
    array=("${array[@]}" a b c)
    

    les fonctions à utiliser pour le traitement sont configurées avec des variables spéciales. par exemple, on peut indiquer que la commande add ci-dessus est en réalité gérée par la fonction array_add et que c'est une commande de type modify qui prend en premier argument le nom du tableau:

    __evala_add_func=array_add
    __evala_add_type=m
    __evala_add_arg=first
    

    en fonction du type de fonction, les arguments supplémentaires supportés sont différents. par défaut, la fonction à utiliser est du même nom que la commande, est du type scalar, et prend comme argument @ Ainsi les deux commandes suivantes sont équivalentes:

    evala with array // echo
    echo "${array[@]}"
    

    et assument les définitions suivantes:

    __evala_echo_func=echo
    __evala_echo_type=s
    __evala_echo_arg=@
    
  • evalx permet d'utiliser toutes ces fonctions ensemble

    evalx seq 5 //p grep -v 3 //a prepend prefix // append suffix //c echo
    array=($(seq 5 | grep -v 3)); array=(prefix "${array[@]}"); array=("${array[@]}" suffix); echo "${array[@]}"
    
    # à partir du mode evala, on peut exécuter directement les arguments du
    # tableau comme une commande en terminant par //c
    evalx -a with array // prepend echo //c
    array=(echo "${array[@]}"); "${array[@]}"
    

    evalx commence par défaut en mode evalc. il est possible avec les options -i, -s, -a, -c, -p, -m de forcer respectivement evali, evals, evala, evalc, evalp, evalm

  • Il faudra réfléchir à comment sortir du mode evalm pour utilisation avec evalx. ou alors on part du principe que evalm est toujours en fin de chaine.

Faire la fonction cmdx

cmdx permet de lancer une commande avec les arguments qui sont générés par evalx. cmdx commence par défaut en mode evalm. Par exemple, les deux commandes suivantes sont équivalentes:

cmdx etitle //"Copie de " basename "$src" //" vers " ppath "$dest"
etitle "Copie de $(basename "$src") vers $(ppath "$dest")"

Comme pour evalx, les options -i, -s, -a, -c, -p, -m permettent de forcer respectivement les modes evali, evals, evala, evalc, evalp, evalm. Par exemple les deux commandes suivantes sont équivalentes:

cmdx -c echo a // b
echo "$(b "$(a)")"

Faire la fonction checkx

checkx permet de tester le résultat d'une commande evalx. elle s'utilise de cette manière:

checkx cmds... OP VALUE

Les opérateurs sont de la forme:

is -n|notempty
is -z|empty
is ok
is ko
== value
!= value
etc.

checkx remplace testx avec une syntaxe plus naturelle. si aucun script n'utilise les fonctions testx, peut-être peut-on simplement supprimer les fonctions testx et renommer checkx en testx

Comme pour evalx, les options -i, -s, -a, -c, -p, -m permettent de forcer respectivement les modes evali, evals, evala, evalc, evalp, evalm. Par exemple les deux commandes suivantes sont équivalentes:

checkx -p a // b == c
[ "$(evalp a // b)" == c ]

Les commande suivantes sont équivalentes deux à deux:

checkx cmd is -z
[ -z "$(evalx cmd)" ]

checkx cmd is ok
evalx cmd; [ $? -eq 0 ]

checkx cmd is ko
evalx cmd; [ $? -ne 0 ]

checkx cmd == value
[ "$(evalx cmd)" == value ]

Faire la fonction storex

storex permet de mettre le résultat d'une fonction evalx dans une variable ou de l'ajouter à un tableau. l'idée est d'avoir la même syntaxe que checkx. je ne suis pas encore tout à fait sûr que ce soit une bonne chose.

Les commande suivantes sont équivalentes deux à deux:

storex cmd to var
var="$(evalx cmd)"

storex cmd to var
setx var=cmd

storex -a cmd to array
array_add array "$(evalx cmd)"

storex -r cmd from array
array_del array "$(evalx cmd)"

syntaxes alternatives

storex cmd to var
addx cmd to array
removex cmd from array

alternatives

setx var=cmd
evalx cmd // array_add array
evalx cmd // array_del array

note: il ne semble pas nécessaire au vu de l'alternative d'implémenter storex, addx, removex.

par contre, il faut corriger un bug d'evalc: la dernière commande doit être exécutée telle quelle. en effet,

evalc a // b

devrait être équivalent à

b "$(a)"

mais en fait c'est plutôt

echo "$(b "$(a)")"

et ça pose problème, notamment si b initialise des variables, etc.

Fonctions diverses

retcode cmd
affiche le code de retour de cmd. équivalent à cmd; echo $?

-- coding: utf-8 mode: markdown -- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary