EDIT: S'il vous plaît, s'il vous plaît , veuillez lire les deux exigences énumérées au bas de cet article avant de répondre. Les gens continuent d'afficher leurs nouveaux joyaux et bibliothèques, etc., qui ne répondent clairement pas aux exigences.
Parfois, je veux pirater à peu de frais certaines options de ligne de commande dans un simple script. Une façon amusante de le faire, sans avoir à gérer les getopts ou l'analyse ou quoi que ce soit du genre, 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 la syntaxe normale des options Unix, car elle acceptera les paramètres de ligne de commande d'options sans option, comme dans " myprog -i foo bar -q
", mais je peux vivre avec cela. (Certaines personnes, comme les développeurs Subversion, préfèrent cela. Parfois moi aussi.)
Une option qui est simplement présente ou absente ne peut pas être implémentée beaucoup plus simplement que ce qui précède. (Une affectation, un appel de fonction, un effet secondaire.) Existe-t-il un moyen tout aussi simple de traiter les options qui prennent un paramètre, tel que " -f
filename "?
ÉDITER:
Un point que je n’ai pas souligné plus tôt, car il ne m’était pas devenu clair jusqu’à ce que l’auteur de Trollop ait mentionné que la bibliothèque tenait «dans un fichier [800 lignes]», c’est que je ne cherche pas seulement à nettoyer syntaxe, mais pour une technique qui présente les caractéristiques suivantes:
L'intégralité du code peut être inclus dans le fichier de script (sans surcharger le script lui-même, qui peut ne contenir que quelques dizaines de lignes), de sorte que l'on puisse déposer un seul fichier dans un répertoire
bin
sur n'importe quel système avec un Ruby 1.8 standard . [5-7] installation et utilisez-le. Si vous ne pouvez pas écrire un script Ruby qui n'a pas d'instructions require et où le code pour analyser quelques options se trouve sous une douzaine de lignes environ, vous échouez à cette exigence.Le code est suffisamment petit et simple pour qu'on s'en souvienne suffisamment pour taper directement du code qui fera l'affaire, plutôt que de couper et coller ailleurs. Pensez à la situation où vous êtes sur la console d'un serveur pare-feu sans accès à Internet et que vous souhaitez lancer un script rapide à utiliser par un client. Je ne sais pas pour vous, mais (en plus de ne pas répondre à l'exigence ci-dessus), mémoriser même les 45 lignes de micro-optparse simplifié n'est pas quelque chose que je veux faire.
getoptlong
et optparse
sont dans la bibliothèque standard de ruby, vous n'avez donc pas besoin de les copier lors du déploiement de votre script - si ruby fonctionne sur cette machine, alors require 'optparse'
ou require 'getoptlong'
fonctionnera aussi.