ptitcon a écrit :
J'ai un petit soucis avec getopts, je l'utilise avec une seule option pour créer un mode debug dans un script. Le problème est que ce script reçoit déjà un argument,donc j'aimerai utilisé l'option pour getopt après le premier argument comme ceci :
Seulement, quand j'exécute mon script soit l'option est placée en premier et est traitée comme argument du script en plus d'être traité par getopts, soit elle est placée après et getopts ne la voit pas...
|
C'est tout à fait normal. Sur Unix/Linux, le fonctionnement des options est "normalisé" et doivent impérativement être placées avant les arguments de travail du programme (du script). Donc dès que getopts trouve un argument qui ne commence pas par "-", il considère qu'il a fini de bosser.
Pour résoudre ton problème, il faut que, une fois que getopts a fini de bosser, tu indiques à ton script de sauter les options traitées pour pas qu'elles soient à nouveau traitées comme argument. C'est faisable car getopts stocke le nombre de passes qu'il a exécutées dans la variable OPTIND (y compris la passe où il s'est apreçu qu'il avait fini). Donc "$OPTIND - 1" contient le nb d'options. Il te suffit donc de faire un shift de cette valeur
while getopts d opt
do
case $opt in
d) blablabla;;
esac
done
shift `expr $OPTIND - 1` |
Non
Tu lanceras ton script comme ceci
ou bien
Et si jamais tu voulais passer à ton script la valeur "-d" comme argument et non comme option, il te faudrait envoyer à getopts un indicateur spécifique indiquant "à partir de maintenant, il n'y a plus d'option et les valeurs même avec un tiret seront des arguments". Cet indicateur est le double tiret "--"
ou bien
Code :
- mon_script -d -- -d
|
Message édité par Sve@r le 31-07-2007 à 15:32:04
---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.