РЕДАКТИРОВАТЬ: Пожалуйста, пожалуйста , пожалуйста, прочтите два требования, перечисленные внизу этого сообщения, прежде чем отвечать. Люди продолжают публиковать свои новые жемчужины, библиотеки и тому подобное, что явно не соответствует требованиям.
Иногда я хочу очень дешево превратить некоторые параметры командной строки в простой скрипт. Интересный способ сделать это без использования getopts, синтаксического анализа или чего-то подобного:
...
$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
любой системе со стандартным Ruby 1.8. . [5-7] установка и использование. Если вы не можете написать сценарий Ruby, в котором нет операторов require, а код для синтаксического анализа нескольких параметров занимает менее десятка строк или около того, вы не выполняете это требование.Код небольшой и достаточно простой, чтобы его можно было запомнить достаточно, чтобы напрямую ввести код, который сделает свое дело, а не вырезать и вставить где-то еще. Подумайте о ситуации, когда вы находитесь на консоли сервера, защищенного брандмауэром, без доступа к Интернету, и вы хотите быстро собрать сценарий для использования клиентом. Не знаю, как вы, но (помимо невыполнения указанного выше требования) запоминание даже 45 строк упрощенного micro-optparse - это не то, чем я хочу заниматься.
getoptlong
и optparse
в стандартной библиотеке рубина, так что вам не нужно копировать их при развертывании сценария - если рубин работает на этой машине, то require 'optparse'
или require 'getoptlong'
тоже будет работать.