EDIT: Proszę, proszę , proszę zapoznać się z wymaganiami dwa wymienione na dole tego postu, zanim odpowiedział. Ludzie wciąż publikują swoje nowe perełki, biblioteki i tak dalej, co najwyraźniej nie spełnia wymagań.
Czasami chcę bardzo tanio zhakować niektóre opcje wiersza poleceń do prostego skryptu. Zabawnym sposobem na zrobienie tego bez zajmowania się getopts, parsowaniem lub czymkolwiek w tym stylu jest:
...
$quiet = ARGV.delete('-d')
$interactive = ARGV.delete('-i')
...
# Deal with ARGV as usual here, maybe using ARGF or whatever.
Nie jest to do końca normalna składnia opcji Unixa, ponieważ akceptuje opcje nie będące opcjami parametry wiersza poleceń, jak w " myprog -i foo bar -q", ale mogę z tym żyć. (Niektórzy ludzie, na przykład programiści Subversion, wolą to. Czasami ja też.)
Opcji, która jest po prostu obecna lub nieobecna, nie można zaimplementować w prostszy sposób niż powyższe. (Jedno przypisanie, jedno wywołanie funkcji, jeden efekt uboczny). Czy istnieje równie prosty sposób radzenia sobie z opcjami, które pobierają parametr, na przykład „ -f nazwa pliku ”?
EDYTOWAĆ:
Jedna uwaga, której nie powiedziałem wcześniej, ponieważ nie stało się dla mnie jasne, dopóki autor Trollop nie wspomniał, że biblioteka mieści się „w jednym [800-wierszowym] pliku”, jest to, że szukam nie tylko czystego składnia, ale dla techniki, która ma następujące cechy:
Cały kod można zawrzeć w pliku skryptu (bez przytłaczania samego skryptu, który może mieć tylko kilkadziesiąt linii), dzięki czemu można upuścić pojedynczy plik w katalogu
binna dowolnym systemie ze standardowym Ruby 1.8 , [5-7] instalacji i używaj go. Jeśli nie możesz napisać skryptu Rubiego, który nie zawiera instrukcji wymagających, a kod do parsowania kilku opcji ma mniej niż kilkanaście wierszy, nie spełnisz tego wymagania.Kod jest mały i na tyle prosty, że można go zapamiętać na tyle, aby bezpośrednio wpisać kod, który załatwi sprawę, zamiast wycinać i wklejać z innego miejsca. Pomyśl o sytuacji, w której jesteś na konsoli serwera z zaporą ogniową bez dostępu do Internetu i chcesz wrzucić razem szybki skrypt do użycia przez klienta. Nie wiem jak Ty, ale (poza niespełnieniem powyższego wymagania) zapamiętywanie nawet 45 linijek uproszczonej mikroopcji nie jest czymś, na czym mi zależy.
getoptlongi optparsesą w standardowej bibliotece Ruby, więc nie ma potrzeby kopiowania ich podczas wdrażania skryptu - jeżeli rubin działa na tej maszynie, to require 'optparse'czy require 'getoptlong'będzie działać zbyt.