【发布时间】:2010-10-28 05:05:21
【问题描述】:
编辑:请,请,请在回复之前阅读本文底部列出的两个要求。人们不断发布他们的新 gems 和库之类的东西,显然不符合要求。
有时我想非常便宜地将一些命令行选项破解成一个简单的脚本。一种有趣的方法是:
...
$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 行] 文件中”,我才明白我不认为仅适用于简洁的语法,但适用于具有以下特征的技术:
整个代码可以包含在脚本文件中(不会压倒实际的脚本本身,可能只有几十行),因此可以将单个文件放入
bindir 在任何具有标准 Ruby 1.8.[5-7] 安装的系统上并使用它。如果你不能编写一个没有 require 语句的 Ruby 脚本,并且解析几个选项的代码不到十几行左右,那么你就达不到这个要求。代码小而简单,以至于人们可以记住足够多的代码来直接输入代码,而不是从其他地方剪切和粘贴。想一想您在无法访问 Internet 的防火墙服务器的控制台上的情况,并且您想将一个快速脚本组合在一起供客户端使用。我不了解你,但是(除了不符合上述要求之外)即使是 45 行简化的 micro-optparse 也不是我想做的事。
【问题讨论】:
-
只是对反对 getoptlong 感到好奇?
-
它的详细程度。使用 getoptlog,有时解析代码的选项比实际执行工作的脚本部分要长。这不仅仅是美学问题,而是维护成本问题。
-
我不明白脚本包含要求 -
getoptlong和optparse都在标准 ruby 库中,因此在部署脚本时不需要复制它们 - 如果 ruby 有效在那台机器上,然后require 'optparse'或require 'getoptlong'也可以工作。 -
请参阅stackoverflow.com/questions/21357953/…,以及威廉摩根在下面关于 Trollop 的回答。
-
@CurtSampson 我不敢相信有多少人没有回答你的问题。不管怎样,终于得到了一个关于 3 个帖子的好答案 XD XD
标签: ruby