amélioration parse_args

This commit is contained in:
Jephté Clain 2023-12-11 10:04:02 +04:00
parent 2b10acacb2
commit 3fc5f05f5d
4 changed files with 42 additions and 8 deletions

22
bash/TODO.md Normal file
View File

@ -0,0 +1,22 @@
# nulib/bash
* [ ] args: support des noms d'argument pour améliorer l'affichage de l'aide.
par exemple la définition
~~~
-f:FILE,--input input= "spécifier le fichier en entrée"
~~~
donnera cette aide:
~~~
-f, --input FILE
spécifier le fichier
~~~
* [ ] args: après le support des noms d'arguments, ajouter la génération
automatique de l'auto-complétion basée sur ces informations. certains noms
seraient normalisés: FILE pour un fichier, DIR pour un répertoire, ENV pour
une variable d'environnement, etc.
on pourrait même considérer mettre des patterns pour la sélection, e.g
~~~
"-C,--config:FILE:*.conf" input= "spécifier le fichier de configuration"
~~~
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary

View File

@ -47,6 +47,8 @@ usage
Peut contenir autant de lignes que nécessaire. Chaque ligne est préfixée du
nom du script, jusqu'à la première ligne vide. Ensuite, les lignes sont
affichées telles quelles.
Le premier espace est ignoré, ce qui permet de spécifier des USAGEs avec une
option, e.g ' -c VALUE'
+|-
: méthode d'analyse des arguments.
@ -241,7 +243,7 @@ function __parse_args() {
local first usage nl=$'\n'
local prefix=" $MYNAME "
local usages="$__USAGE"
local usages="${__USAGE# }"
[ -n "$usages" ] || usages="[options]"
help="$help
@ -274,9 +276,7 @@ $prefix$usage"
esac
if [ -n "$first" ]; then
first=
help="$help
OPTIONS"
help="$help${nl}${nl}OPTIONS"
fi
# est-ce que l'option prend un argument?
__witharg=
@ -301,8 +301,7 @@ OPTIONS"
fi
if [ -n "$first" ]; then
first=
help="$help
"
help="$help${nl} "
else
help="$help, "
fi
@ -313,8 +312,7 @@ OPTIONS"
shift
# prendre la description le cas échéant
if [ "${1#-}" == "$1" ]; then
help="$help
$1"
help="$help${nl} ${1//$nl/$nl }"
shift
fi
done

14
bash/tests/test-args-help.sh Executable file
View File

@ -0,0 +1,14 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname -- "$0")/../src/nulib.sh" || exit 1
#NULIB_NO_DISABLE_SET_X=1
args=(
"tester l'affichage de l'aide"
-f:,--input input= "spécifier le fichier en entrée
il est possible de spécifier aussi un répertoire auquel cas un fichier par défaut est chargé
nb: l'aide pour cette option doit faire 3 lignes indentées"
)
parse_args "$@"; set -- "${args[@]}"
enote "lancer le script avec --help pour afficher l'aide"