• [^] # Re: Exemple simple

    Posté par (site web personnel) . En réponse à la dépêche Bash Argsparse : mieux gérer sa ligne de commande dans ses scripts.. Évalué à 5. Dernière modification le 12 octobre 2013 à 15:34.

    Je ne force personne (a part certains, qui se reconnaitront - private joke) mais je refute l'argument.

    J'ai constate que ce genre de bout de code etait tres souvent 1. dupliqué partout, tout le temps 2. penible a ecrire 3. penible a ecrire correctement, a la fois dans la syntaxe (manque de double-quotes, "eval" utilise a mauvais escient et mal controle) et dans le design (gestions des options longues hasardeuse, variables utilisees nommees aleatoirement, ce qui nuit a la lisibilite).

    Typiquement, ton exemple ne gere pas le cas d'une chaine vide passee en parametre.

    Pour la ligne de commande

    foo.sh "" 1 2 3

    Ton script ignorera completement 1, 2 et 3. (削除) C'est peut-etre un detail pour vous mais pour moi ca veut dire beaucoup. (削除ここまで) Et peut-etre que tu n'en as rien a faire pour ton cas specifique mais de la a dire que ca convient dans la plupart des cas je trouve ca un tantinet exagere.

    Pour moins de lignes de code, je te propose d'avoir en plus :

    1. Une meilleure robustesse (ce que l'utilisateur rentre, le script l'aura entre les mains)
    2. Un usage-message genere automatiquement
    3. Une nomenclature claire (enfin, relativement claire : la syntaxe de bash est ce qu'elle est) :
      • la valeur de option 2 dans "${program_options[option2]}"
      • tes fichiers dans "${program_params[@]}"
      • la possibilite de tester option1 avec des syntaxe "if argsparse_is_option_set option1; then ... ; fi"
    4. Un comportement non-ambigu : pour reprendre ton bout de code : tu permets "--option2=tata" mais pas "--option2 tata" ? Pourquoi peut-on faire l'un mais pas l'autre alors que ce sont 2 formes d'ecritures permises par getopt et que de facto l'utilisateur espere pouvoir les utiliser ?

    Je pense qu'argsparse est encore moins contraignant pour les gens qui ne veulent pas se prendre la tete.