Utilizo getopts para analizar argumentos en scripts de bash como
while getopts ":hd:" opt; do
case $opt in
d ) echo "directory = $OPTARG"; mydir="$OPTARG"; shift $((OPTIND-1)); OPTIND=1 ;;
h ) helptext
graceful_exit ;;
* ) usage
clean_up
exit 1
esac
done
exeparams="$*"
exeparams
mantendrá las opciones / argumentos no analizados. Dado que quiero usar exeparams para mantener las opciones para que un comando se ejecute dentro del script (que puede superponerse con las propias opciones de scripts), quiero usar - para finalizar las opciones pasadas al script. Si paso, por ejemplo
myscript -d myscriptparam -- -d internalparam
exeparams
sostendrá
-- -d internalparam
Ahora quiero eliminar la guía --
para pasar estos argumentos al comando interno. ¿Hay una manera elegante de hacer esto o puedo obtener una cadena que contenga solo el resto sin --
getopts?
shift; OPTIND=1
dentro delgetopts
ciclo probablemente no sea la mejor manera de hacerlo. Solo funciona en su caso porque solo tiene 2 opciones y en todas las demás simplemente sale del script. De lo contrario, necesitaríashift; OPTIND=1
en cada opción, lo que significa código duplicado (mala práctica). Simplemente haga unashift $((OPTIND - 1))
inmediatamente después del final del ciclo: esta es la forma más convencional y probablemente también la más eficiente.