BEARBEITEN: Bitte, bitte , bitte lesen Sie die beiden Anforderungen, die am Ende dieses Beitrags aufgeführt sind, bevor Sie antworten. Die Leute veröffentlichen immer wieder ihre neuen Juwelen und Bibliotheken und so weiter, die eindeutig nicht den Anforderungen entsprechen.
Manchmal möchte ich einige Befehlszeilenoptionen sehr billig in ein einfaches Skript hacken. Eine unterhaltsame Möglichkeit, dies zu tun, ohne sich mit Getopts, Parsing oder Ähnlichem zu befassen, ist:
...
$quiet = ARGV.delete('-d')
$interactive = ARGV.delete('-i')
...
# Deal with ARGV as usual here, maybe using ARGF or whatever.
Es ist nicht ganz die normale Unix-Optionssyntax, da sie Optionen akzeptiert, die keine Optionsbefehlszeilenparameter sind, wie in " myprog -i foo bar -q
", aber damit kann ich leben. (Einige Leute, wie die Subversion-Entwickler, bevorzugen dies. Manchmal auch.)
Eine Option, die nur vorhanden ist oder fehlt, kann nicht viel einfacher als die oben genannte implementiert werden. (Eine Zuweisung, ein Funktionsaufruf, ein Nebeneffekt.) Gibt es eine ebenso einfache Möglichkeit, mit Optionen umzugehen, die einen Parameter annehmen, z. B. " -f
Dateiname "?
BEARBEITEN:
Ein Punkt, den ich vorher nicht angesprochen habe, weil mir erst klar geworden war, als der Autor von Trollop erwähnte, dass die Bibliothek "in eine [800-Zeilen] -Datei" passt, ist, dass ich nicht nur nach sauber suche Syntax, jedoch für eine Technik mit folgenden Eigenschaften:
Der gesamte Code kann in die Skriptdatei aufgenommen werden (ohne das eigentliche Skript selbst zu überfordern, das nur ein paar Dutzend Zeilen umfassen kann), sodass eine einzelne Datei in einem
bin
Verzeichnis auf jedem System mit einem Standard-Ruby 1.8 abgelegt werden kann [5-7] installieren und verwenden. Wenn Sie kein Ruby-Skript schreiben können, für das keine erforderlichen Anweisungen erforderlich sind und der Code zum Parsen einiger Optionen weniger als ein Dutzend Zeilen enthält, besteht diese Anforderung nicht.Der Code ist klein und einfach genug, dass man sich genug daran erinnern kann, um direkt Code einzugeben, der den Trick macht, anstatt ihn von einem anderen Ort aus auszuschneiden und einzufügen. Stellen Sie sich die Situation vor, in der Sie sich auf der Konsole eines Firewall-Servers ohne Internetzugang befinden und ein schnelles Skript für einen Client zusammenstellen möchten. Ich weiß nichts über dich, aber (abgesehen davon, dass ich die oben genannten Anforderungen nicht erfüllt habe) ist es mir nicht wichtig, mir selbst die 45 Zeilen vereinfachter Mikrooptik zu merken.
getoptlong
und optparse
befinden sich in der Standard-Ruby-Bibliothek, sodass Sie sie bei der Bereitstellung Ihres Skripts nicht kopieren MÜSSEN - wenn Ruby auf diesem Computer funktioniert, dann require 'optparse'
oder require 'getoptlong'
auch.