【发布时间】:2015-03-23 17:26:44
【问题描述】:
是否可以使用 Ruby 的 OptionParser 处理文件列表,还是必须单独解析 ARGV?
我正在尝试解析在 Linux 中运行的 Ruby 脚本的命令行参数。目前,我的脚本使用如下样式调用:./run.rb /dir/*,我解析 ARGV 以获取它所操作的文件列表。但是,现在我有几个要在其中切换的操作,因此我不想编辑脚本,而是想添加一个命令行选项。所以脚本会被调用为./run.rb -a action -i /dir/*。
当我试图让这个工作时,我遇到了只获取目录中的第一个文件的问题。 “Parsing command-line arguments as wildcards”解释说原因是外壳程序正在扩展文件列表,并且当 OptionParser 处理一个数组时,它会查找逗号分隔的值。答案还说:
因为 * 通配符被替换为空格分隔的文件名 在 OptionParser 运行后,您必须对 ARGV 进行后处理 它,或以编程方式 glob 目录并构建列表 方法。 ARGV 拥有所有文件,除了在 -a 选项中选取的文件 所以,就个人而言,我会放弃 -a 选项并让 ARGV 包含所有 文件。
OptionParser 没有办法处理 shell 扩展返回的空格分隔值,这是否正确?我没有找到任何东西,所以我认为我的解释是正确的。但我也认为这将是一个常用的功能,所以我很惊讶是这种情况,因此提出这个问题的原因。
【问题讨论】: