support des options avancées
This commit is contained in:
parent
3fc5f05f5d
commit
d44937132a
|
@ -30,8 +30,10 @@ parse_args "$@"; set -- "${args[@]}"
|
|||
au retour de la fonction, args contient les arguments qui n'ont pas été traités
|
||||
automatiquement.
|
||||
|
||||
l'option --help est automatiquement gérée. les descriptions sont utilisées pour
|
||||
l'affichage de l'aide.
|
||||
les options --help et --help-all sont automatiquement gérées. avec --help,
|
||||
seules les options standards sont affichées. --help-all affiche toutes les
|
||||
options. les descriptions sont utilisées pour l'affichage de l'aide. une option
|
||||
avancée est identifiée par une description qui commence par ++
|
||||
|
||||
desc
|
||||
: description de l'objet du script ou de la fonction. cette valeur est
|
||||
|
@ -101,7 +103,8 @@ action
|
|||
l'option (avec ou sans argument, ajout ou non à un tableau)
|
||||
|
||||
optdesc
|
||||
: description de l'option. cette valeur est facultative"
|
||||
: description de l'option. cette valeur est facultative. si la description
|
||||
commence par ++, c'est une option avancée qui n'est pas affichée par défaut."
|
||||
function parse_args() {
|
||||
[ -z "$NULIB_NO_DISABLE_SET_X" ] && [[ $- == *x* ]] && { set +x; local NULIB_ARGS_SET_X=1; }
|
||||
local __r=
|
||||
|
@ -169,7 +172,7 @@ function __parse_args() {
|
|||
__def="${__def#-}"
|
||||
__lopts="$__lopts${__lopts:+,}$__def$__witharg"
|
||||
fi
|
||||
[ "$__def" == help ] && __autohelp=
|
||||
[ "$__def" == help -o "$__def" == help-all ] && __autohelp=
|
||||
done
|
||||
# sauter l'action
|
||||
shift
|
||||
|
@ -179,7 +182,7 @@ function __parse_args() {
|
|||
|
||||
# __sopts ne doit pas être vide, rajouter ? si aucune option courte n'est
|
||||
# définie, indépendamment de la valeur de autohelp
|
||||
[ -n "$__autohelp" ] && __lopts="$__lopts${__lopts:+,}help"
|
||||
[ -n "$__autohelp" ] && __lopts="$__lopts${__lopts:+,}help,help-all"
|
||||
[ -n "$__sopts" ] || __sopts=?
|
||||
|
||||
__sopts="$__popt$__sopts"
|
||||
|
@ -236,7 +239,7 @@ function __parse_args() {
|
|||
fi
|
||||
}
|
||||
function showhelp@() {
|
||||
local help="$MYNAME"
|
||||
local help="$MYNAME" showadv="$1"
|
||||
if [ -n "$__DESC" ]; then
|
||||
help="$help: $__DESC"
|
||||
fi
|
||||
|
@ -288,7 +291,7 @@ $prefix$usage"
|
|||
fi
|
||||
done
|
||||
# description de l'option
|
||||
local first=1
|
||||
local first=1 thelp tdesc
|
||||
for __def in "${__defs[@]}"; do
|
||||
__def="${__def%%:*}"
|
||||
if [[ "$__def" == --* ]]; then
|
||||
|
@ -301,20 +304,30 @@ $prefix$usage"
|
|||
fi
|
||||
if [ -n "$first" ]; then
|
||||
first=
|
||||
help="$help${nl} "
|
||||
thelp="${nl} "
|
||||
else
|
||||
help="$help, "
|
||||
thelp="$thelp, "
|
||||
fi
|
||||
help="$help$__def"
|
||||
thelp="$thelp$__def"
|
||||
done
|
||||
[ -n "$__witharg" ] && help="$help VALUE"
|
||||
[ -n "$__witharg" ] && thelp="$thelp VALUE"
|
||||
# sauter l'action
|
||||
shift
|
||||
# prendre la description le cas échéant
|
||||
if [ "${1#-}" == "$1" ]; then
|
||||
help="$help${nl} ${1//$nl/$nl }"
|
||||
tdesc="$1"
|
||||
if [ "${tdesc#++}" != "$tdesc" ]; then
|
||||
# option avancée
|
||||
if [ -n "$showadv" ]; then
|
||||
tdesc="${tdesc#++}"
|
||||
else
|
||||
thelp=
|
||||
fi
|
||||
fi
|
||||
[ -n "$thelp" ] && thelp="$thelp${nl} ${tdesc//$nl/$nl }"
|
||||
shift
|
||||
fi
|
||||
[ -n "$thelp" ] && help="$help$thelp"
|
||||
done
|
||||
uecho "$help"
|
||||
exit 0
|
||||
|
@ -413,6 +426,9 @@ function __parse_opt() {
|
|||
if [ "$option_" == --help -o "$option" == -? ]; then
|
||||
__action="showhelp@"
|
||||
return 0
|
||||
elif [ "$option_" == --help-all ]; then
|
||||
__action="showhelp@ ++"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
# ici, l'option n'a pas été trouvée, on ne devrait pas arriver ici
|
||||
|
|
|
@ -8,6 +8,8 @@ args=(
|
|||
-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"
|
||||
-a,--std . "cette option apparait dans les options standards"
|
||||
-b,--adv . "++cette option apparait dans les options avancées"
|
||||
)
|
||||
parse_args "$@"; set -- "${args[@]}"
|
||||
|
||||
|
|
Loading…
Reference in New Issue