Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby CLI应用程序配置/参数管理_Ruby_Yaml_Command Line Arguments - Fatal编程技术网

Ruby CLI应用程序配置/参数管理

Ruby CLI应用程序配置/参数管理,ruby,yaml,command-line-arguments,Ruby,Yaml,Command Line Arguments,我目前正在Ruby中开发一个CLI应用程序,我正在使用Trollop()处理CLI参数 我还想实现在~/.mycfg和cwd/.mycfg中存储所需选项的可能性,后者优先 我试图实现的行为是: 如果.mycfg存在于当前工作目录中,则从那里加载默认选项;否则,如果它存在于用户的主目录中,则从那里加载选项 如果这些选项也作为参数传递,那么我将重写它们 问题是,配置文件应该采用什么格式?我曾经考虑过YAML,但是接下来如何将Trollop为参数生成的数组与YAML合并,或者以其他方式合并。一件简单的

我目前正在Ruby中开发一个CLI应用程序,我正在使用Trollop()处理CLI参数

我还想实现在~/.mycfg和cwd/.mycfg中存储所需选项的可能性,后者优先

我试图实现的行为是:

如果.mycfg存在于当前工作目录中,则从那里加载默认选项;否则,如果它存在于用户的主目录中,则从那里加载选项

如果这些选项也作为参数传递,那么我将重写它们


问题是,配置文件应该采用什么格式?我曾经考虑过YAML,但是接下来如何将Trollop为参数生成的数组与YAML合并,或者以其他方式合并。

一件简单的事情是,在Trollop处理它之前,可以尝试修改
ARGV
。首先,读入配置文件并将其中存储的数据转换为等效命令行选项数组。现在,将该数组前置到
ARGV
,然后将Trollop设置为松散。这样,Trollop将解析所有参数(无论它们来自配置文件还是CLI)。由于配置文件参数现在列在CLI参数之前,因此任何CLI选项都将覆盖匹配的配置文件选项(因为后面的选项会覆盖前面的选项)

您的配置文件可以是您想要使用的任何格式,但有时最简单的格式可能是最简单的。尝试一种纯文本格式,其中配置文件内容只是您希望传递给脚本的确切参数。也就是说,写入文件的内容时,调用:

your_script.rb `cat optionsfile` -more -CLI -options

将按预期工作。以这种格式存储选项使其易于编辑和处理。只需读入文件(应该是一行)并调用
String.split(“”)
即可将选项拆分为一个数组,就像从
ARGV
输入时出现的一样。一种变体是使用多行配置文件,每行一个CLI参数。在这种情况下,您可以使用类似
文件的方法一次一行构建选项数组。每行(configfile){x |选项数组都非常完美。没有想过修改ARGV,这是一个简单的解决方案。谢谢!