Разбейте строку, чтобы получить только первые 5 символов - PullRequest
0 голосов
/ 15 октября 2018

Я хотел бы перейти в местоположение /var/log/src/ap-kernelmodule-10.001-100

Но похоже, что мой код имеет дело с ap-kernelmodule-10.002-100, ap-kernelmodule-10.003-101 и т. Д. Я хотел быдобраться до места с разделенной строкой и выполнить мою команду.Например: /var/log/src/ap-kernelmodule-10./

Этот скрипт ruby ​​для Linux-машины, поэтому я использовал Mixlib :: ShellOut.

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

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Я не совсем понимаю, чего вы действительно хотите достичь.Вопрос довольно двусмысленный.

Вы знаете, что хотели бы перейти на /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

Дополнительно,параллельное выполнение ресурсов не возможно изначально в шеф-поваре (AFAIK).Таким образом, возможный обходной путь - использовать ресурс bash или ruby_block для создания команд, которые будут выполняться в xargs, parallel или аналогичных инструментах.

Надеюсь, это поможет.

0 голосов
/ 15 октября 2018

Вы не можете быть в нескольких 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
...