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