mirror of
https://github.com/kvz/bash3boilerplate.git
synced 2025-03-01 01:46:09 +00:00
Merge pull request #63 from mstreuhofer/usage-defaults
Allow for multiline opt description in __usage. Fixes #7
This commit is contained in:
commit
e7a0b2f412
56
main.sh
56
main.sh
@ -131,36 +131,44 @@ EOF
|
|||||||
|
|
||||||
# Translate usage string -> getopts arguments, and set $arg_<flag> defaults
|
# Translate usage string -> getopts arguments, and set $arg_<flag> defaults
|
||||||
while read __b3bp_tmp_line; do
|
while read __b3bp_tmp_line; do
|
||||||
# fetch single character version of option string
|
if echo "${__b3bp_tmp_line}" |egrep '^-' >/dev/null 2>&1; then
|
||||||
__b3bp_tmp_opt="$(echo "${__b3bp_tmp_line}" |awk '{print $1}' |sed -e 's#^-##')"
|
# fetch single character version of option string
|
||||||
|
__b3bp_tmp_opt="$(echo "${__b3bp_tmp_line}" |awk '{print $1}' |sed -e 's#^-##')"
|
||||||
|
|
||||||
# fetch long version if present
|
# fetch long version if present
|
||||||
__b3bp_tmp_long_opt="$(echo "${__b3bp_tmp_line}" |awk '/\-\-/ {print $2}' |sed -e 's#^--##')"
|
__b3bp_tmp_long_opt="$(echo "${__b3bp_tmp_line}" |awk '/\-\-/ {print $2}' |sed -e 's#^--##')"
|
||||||
__b3bp_tmp_long_opt_mangled="$(sed 's#-#_#g' <<< $__b3bp_tmp_long_opt)"
|
__b3bp_tmp_long_opt_mangled="$(sed 's#-#_#g' <<< $__b3bp_tmp_long_opt)"
|
||||||
|
|
||||||
# map long name back to short name
|
# map long name back to short name
|
||||||
__b3bp_tmp_varname="__b3bp_tmp_short_opt_${__b3bp_tmp_long_opt_mangled}"
|
__b3bp_tmp_varname="__b3bp_tmp_short_opt_${__b3bp_tmp_long_opt_mangled}"
|
||||||
eval "${__b3bp_tmp_varname}=\"${__b3bp_tmp_opt}\""
|
eval "${__b3bp_tmp_varname}=\"${__b3bp_tmp_opt}\""
|
||||||
|
|
||||||
# check if option takes an argument
|
# check if option takes an argument
|
||||||
__b3bp_tmp_varname="__b3bp_tmp_has_arg_${__b3bp_tmp_opt}"
|
__b3bp_tmp_varname="__b3bp_tmp_has_arg_${__b3bp_tmp_opt}"
|
||||||
if ! echo "${__b3bp_tmp_line}" |egrep '\[.*\]' >/dev/null 2>&1; then
|
if ! echo "${__b3bp_tmp_line}" |egrep '\[.*\]' >/dev/null 2>&1; then
|
||||||
__b3bp_tmp_init="0" # it's a flag. init with 0
|
__b3bp_tmp_init="0" # it's a flag. init with 0
|
||||||
eval "${__b3bp_tmp_varname}=0"
|
eval "${__b3bp_tmp_varname}=0"
|
||||||
else
|
else
|
||||||
__b3bp_tmp_opt="${__b3bp_tmp_opt}:" # add : if opt has arg
|
__b3bp_tmp_opt="${__b3bp_tmp_opt}:" # add : if opt has arg
|
||||||
__b3bp_tmp_init="" # it has an arg. init with ""
|
__b3bp_tmp_init="" # it has an arg. init with ""
|
||||||
eval "${__b3bp_tmp_varname}=1"
|
eval "${__b3bp_tmp_varname}=1"
|
||||||
|
fi
|
||||||
|
__b3bp_tmp_opts="${__b3bp_tmp_opts:-}${__b3bp_tmp_opt}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ -z "${__b3bp_tmp_opt:-}" ] && continue
|
||||||
|
|
||||||
|
if echo "${__b3bp_tmp_line}" |egrep '\. Default=' >/dev/null 2>&1; then
|
||||||
|
# ignore default value if option does not have an argument
|
||||||
|
__b3bp_tmp_varname="__b3bp_tmp_has_arg_${__b3bp_tmp_opt:0:1}"
|
||||||
|
|
||||||
|
if [ "${!__b3bp_tmp_varname}" = "1" ]; then
|
||||||
|
__b3bp_tmp_init="$(echo "${__b3bp_tmp_line}" |sed 's#^.*Default=\(\)#\1#g')"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
__b3bp_tmp_opts="${__b3bp_tmp_opts:-}${__b3bp_tmp_opt}"
|
|
||||||
|
|
||||||
__b3bp_tmp_varname="arg_${__b3bp_tmp_opt:0:1}"
|
__b3bp_tmp_varname="arg_${__b3bp_tmp_opt:0:1}"
|
||||||
if ! echo "${__b3bp_tmp_line}" |egrep '\. Default=' >/dev/null 2>&1; then
|
eval "${__b3bp_tmp_varname}=\"${__b3bp_tmp_init}\""
|
||||||
eval "${__b3bp_tmp_varname}=\"${__b3bp_tmp_init}\""
|
|
||||||
else
|
|
||||||
__b3bp_tmp_match="$(echo "${__b3bp_tmp_line}" |sed 's#^.*Default=\(\)#\1#g')"
|
|
||||||
eval "${__b3bp_tmp_varname}=\"${__b3bp_tmp_match}\""
|
|
||||||
fi
|
|
||||||
done <<< "${__usage:-}"
|
done <<< "${__usage:-}"
|
||||||
|
|
||||||
# run getopts only if options were specified in __usage
|
# run getopts only if options were specified in __usage
|
||||||
|
1
test/fixture/main-usage-defaults.exitcode
Normal file
1
test/fixture/main-usage-defaults.exitcode
Normal file
@ -0,0 +1 @@
|
|||||||
|
0
|
7
test/fixture/main-usage-defaults.stdio
Normal file
7
test/fixture/main-usage-defaults.stdio
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
ACCPTST:STDIO_REPLACE_DATETIMES
|
||||||
|
{datetime} UTC [32m[ info][0m arg_1: 0
|
||||||
|
{datetime} UTC [32m[ info][0m arg_2: 0
|
||||||
|
{datetime} UTC [32m[ info][0m arg_3: THREE
|
||||||
|
{datetime} UTC [32m[ info][0m arg_4: FOUR
|
||||||
|
{datetime} UTC [32m[ info][0m arg_5: OOOPS
|
||||||
|
{datetime} UTC [32m[ info][0m arg_6:
|
33
test/scenario/main-usage-defaults/run.sh
Executable file
33
test/scenario/main-usage-defaults/run.sh
Executable file
@ -0,0 +1,33 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -o pipefail
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
# set -o xtrace
|
||||||
|
|
||||||
|
# Set magic variables for current FILE & DIR
|
||||||
|
__dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
__file="${__dir}/$(basename "${BASH_SOURCE[0]}")"
|
||||||
|
__base="$(basename ${__file} .sh)"
|
||||||
|
__root="$(cd "$(dirname $(dirname $(dirname "${__dir}")))" && pwd)"
|
||||||
|
|
||||||
|
# Set __usage and source main.sh
|
||||||
|
read -r -d '' __usage <<-'EOF' || true # exits non-zero when EOF encountered
|
||||||
|
-1 --one Do one thing. Default="ONE"
|
||||||
|
More description.
|
||||||
|
-2 --two Do two things.
|
||||||
|
More description. Default="TWO"
|
||||||
|
-3 --three [arg] Do three things. Default="THREE"
|
||||||
|
More description.
|
||||||
|
-4 --four [arg] Do four things.
|
||||||
|
More description. Default="FOUR"
|
||||||
|
-5 --five [arg] Do five things. Default="FIVE"
|
||||||
|
More description. Default="OOOPS"
|
||||||
|
-6 --six [arg] Do six things.
|
||||||
|
More description.
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "ACCPTST:STDIO_REPLACE_DATETIMES"
|
||||||
|
|
||||||
|
source "${__root}/main.sh"
|
||||||
|
|
||||||
|
for argument in ${!arg_*}; do info "${argument}: ${!argument}"; done
|
Loading…
x
Reference in New Issue
Block a user