编辑:拜托,拜托,在回复之前,请先阅读此帖子底部列出的两个要求。人们一直在发布他们的新宝石和资源库,而这些显然不符合要求。
有时,我想非常便宜地将一些命令行选项修改成一个简单的脚本。一个有趣的方法,无需处理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
filename ”?
编辑:
我之前没有提过一点,因为直到Trollop的作者提到该库适合“在一个[800行]文件中”时,我才意识到这一点,因为我不仅在寻找干净的东西。语法,但具有以下特征的技术:
整个代码都可以包含在脚本文件中(而不会占用实际的脚本本身,可能只有几十行),因此,可以在
bin
具有标准Ruby 1.8的任何系统上将单个文件放入目录中。[5-7]安装并使用它。如果您无法编写没有require语句的Ruby脚本,并且解析几个选项的代码不到12行,那么您将无法满足此要求。该代码小而简单,以至于人们可以记住足够多的代码以直接键入将完成此操作的代码,而不是从其他位置进行剪切和粘贴。考虑一下您处于无法访问Internet的防火墙服务器的控制台上的情况,并且希望将一个快速的脚本放在一起供客户端使用。我不了解您,但是(除未达到上述要求之外)我什至不打算记住45行简化的微光学显微镜。
getoptlong
和optparse
在标准Ruby库,这样你就不需要在部署脚本时复制它们-如果红宝石的作品那台机器上,然后require 'optparse'
或require 'getoptlong'
将工作过。