comment faire getopts vient de lire le premier caractère post `-`

J'ai un shell script testShell.sh qui utilise getopts comme ci-dessous:

 #!/bin/bash while getopts ":j:e:" option; do case "$option" in j) MYHOSTNAME=$OPTARG ;; e) SCRIPT_PATH=$OPTARG ;; *) ;; esac done echo "j=$MYHOSTNAME" echo "e=$SCRIPT_PATH" shift $((OPTIND - 1)) echo "remaining=$@" 

Quand je teste, lance comme suit:

 $ testShell.sh -jvalue1 -evalue4 -Djvalue3 -pvalue2 

La sortie que je reçois est la suivante:

 j=value3 e=2 remaining= 

Mais je voudrais la sortie comme:

 j=value1 e=value4 remaining=-Djvalue3 -pvalue2 

Est-il possible de s'assurer que getopts ne regarde que le premier caractère post - symbole? de sorte qu'il n'interprète pas -Djvalue3 comme -jvalue3 et -pvalue2 comme -e2 .

essaye ça:

 $ ./testShell.sh -j value1 -e value4 -D jvalue3 -p value2 j=value1 e=value4 remaining=jvalue3 -p value2 

Notez les espaces entre les options et les strings d'options.

help getopts dit:

 OPTSTRING contains the option letters to be recognized; if a letter is followed by a colon, the option is expected to have an argument, which should be separated from it by white space. 

c'est-à-dire que l'espace entre l'option et toute string d'options est requirejs.

Si vous avez besoin de plus que le bash embedded dans getopt, l'utilitaire / usr / bin / getopt prend en charge les options longues et courtes, avec ou sans espaces entre les options et la string d'options. prend également en charge des fonctionnalités supplémentaires comme les arguments de string facultatifs.

BTW, / usr / bin / getopt est disponible dans le package util-linux dans debian et les dérivés comme ubuntu … dunno sur les autres dissortingbutions ou * nixes, mais la source sera disponible dans les archives debian si vous ne pouvez pas la find n'importe où ailleurs.

Après l'avoir posté sur 3 forums et en cherchant partout … finalement j'ai essayé ce qui suit et ça a marché …

 testShell.sh -jvalue1 -evalue4 -- -Djvalue3 -pvalue2 

Remarquer

 -- 

après -evalue4

Et la sortie était

 j=value1 e=value4 remaining=-Djvalue3 -pvalue2 

Je crois -- request à getopts d' arrêter les options de traitement.