Comment autoriser les arguments non-option dans n’importe quel ordre?

J’ai un programme C qui s’attend à être appelé avec plusieurs options et 1 argument non-option (c’est-à-dire sans lettre d’option associée) et utilise getopt pour parsingr ces options. Par exemple, il pourrait être appelé avec:

myProgram -a "aParam" -b "bParam" "xParam" : myProgram -a "aParam" -b "bParam" "xParam"

J’utilise SLES10 et les options fonctionnent dans n’importe quel ordre. Par exemple, l’argument non-option, “xParam” pourrait être le premier:

Exemple2: myProgram "xParam" -a "aParam" -b "bParam"

Cependant, lors des tests dans SLES11, il semble que getopt arrête le traitement dès qu’il atteint un paramètre non-option. L’exemple 2 ci-dessus ne fonctionne donc pas.

J’ai lu les pages de manuel de getopt et vu que cela pouvait être pertinent:

Si le premier caractère de optssortingng est ‘+’ ou si la variable d’environnement POSIXLY_CORRECT est définie, le traitement des options s’interrompt dès qu’un argument non-option est rencontré.

Je ne sais pas si SLES11 définit POSIXLY_CORRECT par défaut. Quel est le meilleur moyen d’obtenir l’ancien comportement getopt de SLES10 dans SLES11?

Il s’avère que par défaut, il redirigeait vers _posix_getopt (), ce qui était à l’origine du comportement que j’ai décrit ci-dessus.

Les solutions possibles que j’ai trouvées à cela à la fin:

  1. Utilisez getopt_long () à la place. Cela ne semble pas avoir un équivalent posix.
  2. Définissez _GNU_SOURCE, qui arrête la redirection.
  3. Réorganisez manuellement les parameters, éventuellement à l’aide d’un script shell wrapper.