Split the string to get only the first 5 characters

后端 未结 2 568
醉酒成梦
醉酒成梦 2021-01-29 12:34

I would like to go to the location /var/log/src/ap-kernelmodule-10.001-100

But looks like my code has to deal with ap-kernelmodule-10.002-100, ap-kernelmo

相关标签:
2条回答
  • 2021-01-29 12:51

    You can't be in multiple cwds simultaneously. To run the command for each directory that matches the pattern, you can use 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
    
    0 讨论(0)
  • 2021-01-29 12:52

    I am not quite get on what you really want to achieve. Question is rather ambiguous.

    You know you would like to go to /var/log/src/ap-kernelmodule-10.001-100 and run a command, the most obvious way is you could just use:

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

    But if you would like to run a command for each directory like you said in ap-kernelmodule-10.002-100, ap-kernelmodule-10.003-101 etc. with /var/log/src/ap-kernelmodule-10.*/ sequentially.

    Then you could do with:

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

    Additionally, parallel resources execution is not possible natively in chef (AFAIK). So, the possible workaround is to use bash or ruby_block resource to construct commands to be executed in xargs, parallel or similar tools.

    Hope this helps.

    0 讨论(0)
提交回复
热议问题