J'utilise getopts pour analyser les arguments dans les scripts bash comme
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
contiendra toutes les options / arguments non analysés. Étant donné que je veux utiliser exeparams pour conserver les options d'une commande à exécuter dans le script (qui peut chevaucher les propres options des scripts), je veux utiliser - pour mettre fin aux options transmises au script. Si je passe par exemple
myscript -d myscriptparam -- -d internalparam
exeparams
tiendra
-- -d internalparam
Je veux maintenant supprimer le début --
pour passer ces arguments à la commande interne. Existe-t-il un moyen élégant de le faire ou puis-je obtenir une chaîne qui contient juste le reste sans --
getopts?
shift; OPTIND=1
à l'intérieur de lagetopts
boucle n'est probablement pas la meilleure façon de le faire. Cela ne fonctionne que dans votre cas car vous n'avez que 2 options et dans toutes les autres, vous venez de quitter le script. Sinon, vous auriez besoinshift; OPTIND=1
de chaque option, ce qui signifie du code en double (mauvaise pratique). Faites juste unshift $((OPTIND - 1))
immédiatement après la fin de la boucle - c'est la manière la plus conventionnelle et probablement la plus efficace aussi.