EDIT: Будь ласка, будь ласка , будь ласка , прочитайте два вимоги , перелічені в нижній частині цієї посади , перш ніж відповісти. Люди продовжують публікувати свої нові дорогоцінні камені та бібліотеки та інше, що явно не відповідає вимогам.
Іноді мені хочеться дуже дешево зламати деякі параметри командного рядка в простий сценарій. Веселий спосіб зробити це, не маючи справи з геттоптами чи розбором чи іншим подібним:
...
$quiet = ARGV.delete('-d')
$interactive = ARGV.delete('-i')
...
# Deal with ARGV as usual here, maybe using ARGF or whatever.
Це не зовсім звичайний синтаксис параметрів Unix, оскільки він буде приймати параметри командного рядка, які не є опціями, як у " myprog -i foo bar -q
", але я можу з цим жити. (Деякі люди, такі як розробники Subversion, вважають за краще це. Іноді я теж роблю це.)
Варіант, який є лише наявним або відсутній, не може бути реалізований набагато просто, ніж вище. (Одне призначення, один виклик функції, один побічний ефект.) Чи існує однаково простий спосіб розібратися з параметрами, які приймають параметр, наприклад " -f
ім'я файлу "?
Редагувати:
Один момент я не робив раніше, тому що мені не стало зрозуміло, поки автор Trollop не згадав, що бібліотека вміщується "в одному файлі [800 рядків]" - це те, що я шукаю не лише чистого синтаксису, але для техніки, яка має такі характеристики:
Цілість коду можна включити до файлу сценарію (не перевантажуючи власне сам сценарій, який може бути лише пару десятків рядків), так що можна скинути один файл у
bin
dir на будь-якій системі зі стандартним Ruby 1.8 . [5-7] встановлення та використання його. Якщо ви не можете написати сценарій Ruby, який не вимагає операторів, і де код для розбору кількох варіантів знаходиться під десяток рядків, ви не виконаєте цю вимогу.Код невеликий і простий, що можна запам'ятати його достатньо, щоб безпосередньо набрати код, який буде робити хитрість, а не вирізати та вставляти з іншого місця. Подумайте про ситуацію, коли ви знаходитесь на консолі розстріляного каналу, що не має доступу до Інтернету, і ви хочете скласти швидкий сценарій для використання клієнтом. Я не знаю про вас, але (окрім невиконання вимоги, наведеної вище) запам'ятовування навіть 45 рядків спрощеного мікрооптипарту - це не те, що я хочу зробити.
getoptlong
і optparse
знаходяться в стандартній бібліотеці ruby, тому вам НЕ ПОТРІБНО копіювати їх під час розгортання вашого сценарію - якщо рубін працює на цій машині, тоді require 'optparse'
і require 'getoptlong'
буде працювати теж.