Bonjour,

J'essaye d'utiliser getopts avec des options longue pour avoir la possibilité de mettre des espaces dans mes paramètres.

Si j'utilise mon code ci dessous comme ceci : ./test.sh --process "test" -H 1.2.3.4, ca fonctionne bien, mais si je met ./test.sh --process "test1 test2" -H 1.2.3.4, j'ai bien "test1 test2" dans $o_process mais l'option -H n'est jamais lu.

Je ne vois pas pourquoi getopts ne continue pas la lecture des arguments dans ce cas là.
Merci de votre aide.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
#!/bin/bash
 
while getopts "H:P:-:" opt $@; do
  case $opt in
    H) o_hostname=$OPTARG
         ;;
    P) o_process=$OPTARG
       ;;
    c) o_count=$OPTARG
       ;;
    -) case $OPTARG in
         hostname)  o_hostname="${!OPTIND}"; let "OPTIND += 1" ;;
         process)   o_process="${!OPTIND}"; let "OPTIND += 1" ;;
         *) echo "Option inconue, $opt, $OPTARG"
            exit $STATE_UNKNOWN
            ;;
       esac
       ;;
    *) echo "Option inconue, $opt, $OPTARG"
       exit $STATE_UNKNOWN
       ;;
  esac
done
 
echo hostname=$o_hostname
echo process=$o_process
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
# ./test.sh --process test1 -H 1.2.3.4
hostname=1.2.3.4
process=test1
# ./test.sh --process "test1 test2" -H 1.2.3.4
hostname=
process=test1 test2