Perl:命令行覆盖配置文件设置?
发布时间:2020-12-16 06:22:32 所属栏目:大数据 来源:网络整理
导读:我正在构建一个利用配置文件(YAML)读取所有必要配置信息的脚本,然后打印出 Linux管理员需要逐步构建服务器所需的所有必要步骤. 对于运行脚本的Linux Admin,必需的选项是能够在命令行覆盖配置文件中的任何项/值对. 我目前正在处理这种方式似乎过于繁琐,我知道
我正在构建一个利用配置文件(YAML)读取所有必要配置信息的脚本,然后打印出
Linux管理员需要逐步构建服务器所需的所有必要步骤.
对于运行脚本的Linux Admin,必需的选项是能够在命令行覆盖配置文件中的任何项/值对. 我目前正在处理这种方式似乎过于繁琐,我知道必须采用更具创新性和更少笨重的方式来实现这一目标. 在代码I中: >使用YAML::Tiny解析YAML配置文件 location: continent: na country: us city: rh >使用与配置文件项相同的名称创建变量,从配置文件中分配值. my $yaml = YAML::Tiny->new; $yaml = YAML::Tiny->read($config_yml); my $continent = $yaml->[0]->{location}->{continent}; my $country = $yaml->[0]->{location}->{country}; my $city = $yaml->[0]->{location}->{city}; >使用Getopt::Long并分配变量,覆盖在命令行传递的任何内容. GetOptions ( "city=s" => $city,"continent=s" => $continent,"country=s" => $country,); 所以那些只是3个项目/值对,我的实际配置超过40并且将改变…这使得必须继续更新的一些工作.有什么建议? 解决方法
您可以让管理员使用一个类似于
ssh(1) -o的灵活交换机来覆盖YAML设置.如果配置设置很多且可能更改,这尤其适用.
$myscript -o location:city=rh --option location:country=us 现在,在脚本内部,您可以将所有运行时配置捆绑在一起以方便使用(而不是让$this_and_that_opt标量随着时间的推移而扩散).选项解析将看起来像这样: # First,set up %GlobalAppCfg from defaults and YAML # now handle "-o location:country=us" GetOptions('option|o=s' => sub { my (undef,$optstring) = @_; my ($userkey,$val) = split('=',$optstring,2); my ($major,$minor) = split(':',$userkey,2); $GlobalAppCfg->{$major}->{$minor} = $val; },...); 管他呢.你可以规范化配置键和值,处理任意深度的键/子键/子键配置等.这可能会变得很滑,所以你可能希望key-lock那个全局哈希. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |