我想去那个地方
/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
答案 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)本身无法执行并行资源。
因此,可能的解决方法是使用bash
或ruby_block
资源来构造要在xargs
,parallel
或类似工具中执行的命令。
希望这会有所帮助。