amélioration parse_args
This commit is contained in:
parent
2b10acacb2
commit
3fc5f05f5d
|
@ -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
|
|
@ -47,6 +47,8 @@ usage
|
||||||
Peut contenir autant de lignes que nécessaire. Chaque ligne est préfixée du
|
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
|
nom du script, jusqu'à la première ligne vide. Ensuite, les lignes sont
|
||||||
affichées telles quelles.
|
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.
|
: méthode d'analyse des arguments.
|
||||||
|
@ -241,7 +243,7 @@ function __parse_args() {
|
||||||
|
|
||||||
local first usage nl=$'\n'
|
local first usage nl=$'\n'
|
||||||
local prefix=" $MYNAME "
|
local prefix=" $MYNAME "
|
||||||
local usages="$__USAGE"
|
local usages="${__USAGE# }"
|
||||||
[ -n "$usages" ] || usages="[options]"
|
[ -n "$usages" ] || usages="[options]"
|
||||||
help="$help
|
help="$help
|
||||||
|
|
||||||
|
@ -274,9 +276,7 @@ $prefix$usage"
|
||||||
esac
|
esac
|
||||||
if [ -n "$first" ]; then
|
if [ -n "$first" ]; then
|
||||||
first=
|
first=
|
||||||
help="$help
|
help="$help${nl}${nl}OPTIONS"
|
||||||
|
|
||||||
OPTIONS"
|
|
||||||
fi
|
fi
|
||||||
# est-ce que l'option prend un argument?
|
# est-ce que l'option prend un argument?
|
||||||
__witharg=
|
__witharg=
|
||||||
|
@ -301,8 +301,7 @@ OPTIONS"
|
||||||
fi
|
fi
|
||||||
if [ -n "$first" ]; then
|
if [ -n "$first" ]; then
|
||||||
first=
|
first=
|
||||||
help="$help
|
help="$help${nl} "
|
||||||
"
|
|
||||||
else
|
else
|
||||||
help="$help, "
|
help="$help, "
|
||||||
fi
|
fi
|
||||||
|
@ -313,8 +312,7 @@ OPTIONS"
|
||||||
shift
|
shift
|
||||||
# prendre la description le cas échéant
|
# prendre la description le cas échéant
|
||||||
if [ "${1#-}" == "$1" ]; then
|
if [ "${1#-}" == "$1" ]; then
|
||||||
help="$help
|
help="$help${nl} ${1//$nl/$nl }"
|
||||||
$1"
|
|
||||||
shift
|
shift
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
|
@ -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"
|
Loading…
Reference in New Issue