Se você especificar que --
marca o fim das opções e todos os argumentos a seguir serão passados para o subcomando, você pode fazer algo como você pode encontrar em man getopts
:
aflag=
bflag=
while getopts ab: name
do
case $name in
a) aflag=1;;
b) bflag=1
bval="$OPTARG";;
?) printf "Usage: %s: [-a] [-b value] args\n" $0
exit 2;;
esac
done
if [ ! -z "$aflag" ]; then
printf "Option -a specified\n"
fi
if [ ! -z "$bflag" ]; then
printf 'Option -b "%s" specified\n' "$bval"
fi
shift $(($OPTIND - 1))
printf "Remaining arguments are: %s\n$*"
Especificamente, estou me referindo ao fim - getopts
pára as opções de processamento quando encontra --
, então todos esses argumentos permanecerão em $@
. No exemplo acima, todos os argumentos getopts
processados estão com shift
ed e os restantes são impressos todos de uma vez como $*
. Se você manuseá-lo da mesma forma, poderá fazer o seguinte trabalho:
/mysqldumpwrapper.sh \
-u username \
-p password \
-h localhost \
-- \
-now --all of these --are passed through
E para chamar o aplicativo empacotado:
mysqldump "$@" \
--host=$MYSQL_HOST \
--user=$MYSQL_USER \
--password=$MYSQL_PASS "$DB" \
> "$FILE_DEST"