diff --git a/bash/src/base.args.sh b/bash/src/base.args.sh index 5f46664..6ce3278 100644 --- a/bash/src/base.args.sh +++ b/bash/src/base.args.sh @@ -115,7 +115,7 @@ function parse_args() { [ "${1#-}" == "$1" ] && { __USAGE="$1"; shift; } if [ -n "$__r" ]; then : - elif [ "$1" != "+" -a "${1#-}" == "$1" ]; then + elif [ $# -gt 0 -a "$1" != "+" -a "${1#-}" == "$1" ]; then eerror "Invalid args definition: third arg must be an option" __r=1 else @@ -171,7 +171,12 @@ function __parse_args() { # sauter la description le cas échéant [ "${1#-}" == "$1" ] && shift done + + # __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 "$__sopts" ] || __sopts=? + __sopts="$__popt$__sopts" local -a __getopt_args __getopt_args=(-n "$MYNAME" ${__sopts:+-o "$__sopts"} ${__lopts:+-l "$__lopts"} -- "${__ARGS[@]}") @@ -382,10 +387,12 @@ function __parse_opt() { [ -n "$__found" ] && return 0 done - # ici, l'option n'a pas été trouvée, on ne devrait pas arriver ici - if [ "$option_" == --help -a -n "$__autohelp" ]; then - __action="showhelp@" - return 0 + if [ -n "$__autohelp" ]; then + if [ "$option_" == --help -o "$option" == -? ]; then + __action="showhelp@" + return 0 + fi fi + # ici, l'option n'a pas été trouvée, on ne devrait pas arriver ici eerror "Unexpected option '$option_'"; eval "$__DIE" }