Vraiment pas Cher Option de Ligne de Commande l'Analyse en Ruby

EDIT: s'il vous Plaît, veuillez, veuillez lire les deux exigences figurant au bas de ce post avant de répondre. Les gens continuer à poster leurs nouvelles gemmes et les bibliothèques et autres joyeusetés, qui, manifestement, ne répondent pas aux exigences.

Parfois, je veux à très bon marché, hack certaines options de ligne de commande dans un script simple. Une façon amusante de le faire, sans traiter getopts ou de l'analyse ou de quoi que ce soit, est:

...
$quiet       = ARGV.delete('-d')
$interactive = ARGV.delete('-i')
...
# Deal with ARGV as usual here, maybe using ARGF or whatever.

Ce n'est pas tout à fait normal Unix syntaxe des options, car il va accepter les options non-option paramètres de ligne de commande, comme dans "myprog -i foo bar -q", mais je peux vivre avec ça. (Certaines personnes, comme par exemple la Subversion développeurs préfèrent cette. Parfois, je le fais aussi).

Une option qui est tout simplement la présence ou l'absence ne peut pas être mis en œuvre de façon beaucoup plus simple que le précédent. (Une affectation, un appel de fonction, un effet de bord.) Est-il aussi un moyen simple de traiter avec des options qui prend un paramètre, tel que "-f nom de fichier"?

EDIT:

Un point que je n'ai pas fait plus tôt, car il n'était pas devenu clair pour moi jusqu'à ce que l'auteur de Gourgandine mentionné que la bibliothèque tenir "dans un [800-ligne] fichier," c'est que je suis à la recherche non seulement pour le nettoyage de la syntaxe, mais une technique qui a les caractéristiques suivantes:

  1. L'intégralité du code peuvent être inclus dans le fichier de script (sans submerger le script lui-même, qui peut être seulement un couple de douzaine de lignes), de sorte que l'on peut supprimer un seul fichier dans un bin dir sur n'importe quel système avec un standard de Ruby 1.8.[5-7] installation et utilisation. Si vous ne pouvez pas écrire un script Ruby qui n'a pas d'exiger des déclarations et où le code pour parser un couple d'options est en vertu d'une douzaine de lignes, vous ne parvenez pas à cette exigence.

  2. Le code est petit et assez simple que l'on peut se rappeler assez pour taper directement dans le code qui fera l'affaire, plutôt que de couper et coller à partir de quelque part d'autre. Pensez à la situation où vous vous trouvez sur la console d'un pare-feu rompre avec aucun accès à Internet, et que vous voulez jeter un rapide script pour un client à utiliser. Je ne sais pas pour vous, mais (en plus de l'échec à l'exigence ci-dessus), la mémorisation de même les 45 lignes simplifiées en matière de micro-optparse n'est pas quelque chose que j'ai des soins à faire.

  • Juste curieux de la protestation contre getoptlong?
  • Le niveau de verbosité des il. Avec getoptlog, parfois, les options de code d'analyse est plus longue que la partie du script qui fait réellement le travail. Ce n'est pas seulement un enjeu esthétique, mais un coût de maintenance question.
  • Je ne comprends pas l'inclusion de script exigence à la fois getoptlong et optparse sont dans la norme de rubis de la bibliothèque, de sorte que vous n'avez pas BESOIN de copier lors du déploiement de votre script si ruby fonctionne sur cette machine, puis require 'optparse' ou require 'getoptlong' sera trop de travail.
  • Voir stackoverflow.com/questions/21357953/..., ainsi que William Morgan réponse ci-dessous à propos de Gourgandine.
  • Je ne peux pas croire combien de gens n'ont pas la réponse à votre question. De toute façon, a finalement obtenu une bonne réponse sur les 3 postes en bas XD XD