分割字符串仅获得前5个字符

时间:2018-10-15 07:59:25

标签: ruby linux shell chef

我想去那个地方 /var/log/src/ap-kernelmodule-10.001-100

但是看起来我的代码必须处理 ap-kernelmodule-10.002-100,ap-kernelmodule-10.003-101等。 我想用分割字符串到达​​该位置并执行我的命令。 例如:/ var / log / src / ap-kernelmodule-10 ./

这个用于Linux机器的ruby脚本,所以我使用了Mixlib :: ShellOut。

begin  
cmd = Mixlib::ShellOut.new("command run here" , :cwd => 
'/var/cache/acpchef/src/ap-kernelmodule-10xxx')
 cmd.run_command
end

2 个答案:

答案 0 :(得分:0)

您不能同时处于多个cwd中。要为每个与模式匹配的目录运行命令,可以使用Dir#glob

Dir.glob('/var/cache/acpchef/src/ap-kernelmodule-10*').each do |cwd|
  Mixlib::ShellOut.new("command run here", cwd: cwd).run_command
end

答案 1 :(得分:0)

我不太了解您真正想要实现的目标。问题相当模糊。

您知道您想转到/var/log/src/ap-kernelmodule-10.001-100并运行命令,最明显的方法是您可以使用:

execute "command run here" do
 cwd "/var/log/src/ap-kernelmodule-10.001-100"
end

但是,如果您想按ap-kernelmodule-10.002-100依次在ap-kernelmodule-10.003-101/var/log/src/ap-kernelmodule-10.*/等中对每个目录运行命令,则使用

那么您可以使用:

Dir.glob("/var/log/src/ap-kernelmodule-10.*").each do |folder|
  execute "command run here" do
   cwd folder
  end
end

此外,chef(AFAIK)本身无法执行并行资源。 因此,可能的解决方法是使用bashruby_block资源来构造要在xargsparallel或类似工具中执行的命令。

希望这会有所帮助。