我必须到达位置/var/log/acpchef/commv123
,在那里123
可以更改为456
。
我很累Dir.glob
。我需要/var/log/acpchef/commv***
。我的死刑将在mixlibshellout
中。
begin
cwd_kernel = Dir.glob('/var/cache/acpchef/commv***')
cmd = Mixlib::ShellOut.new("commandrun", :cwd => cwd_kernel)
cmd.run_command
log 'run'
end
答案 0 :(得分:2)
这将使文件名与前五个字符以及后面的任何字符匹配:
class A {
static String method1(string a)
{
B b=new B;
//some changes applied on a
return b.method3(a);
}
String method2(String a)
{
return A.method1(a);
}
}
class B {
String method3(String a)
{
C c=new C();
//some changes applied on a
return c.method4(a);
}
}
class C {
String method4(String a)
{
// some changes applied on a
return a;
}
}
这将使文件名与任何三个额外字符相匹配:
Dir.glob('/var/cache/acpchef/commv*')
# will match /var/cache/acpchef/commv12345abcdxyz123456
这将匹配具有三个数字的文件名:
Dir.glob('/var/cache/acpchef/commv???')
# will match /var/cache/acpchef/{commv123, commv456, commvabc, ...}
此外,您的示例未正确使用块语法,并且具有Dir.glob('/var/cache/acpchef/commv[0-9][0-9][0-9]')
# will match /var/cache/acpchef/commv{123, 234, 456, 999, ...}
而没有begin..end
,这实际上什么也不做。它应该变成:
rescue
Dir.glob('/var/cache/acpchef/commv???').each do |cwd_kernel|
cmd = Mixlib::ShellOut.new("commandrun", :cwd => cwd_kernel)
cmd.run_command
log 'run'
end
返回一个Array,它是结果的集合。 Dir.glob
返回一个Enumerator,它基本上是一个对象,它使用新值运行具有新值的以下代码块的次数,这意味着您可以使用它来运行同一块代码Array.each
的所有结果的代码集。该值通过Dir.glob
语法传递到该块。
ruby中的begin
关键字用于捕获错误:
|block_argument|
没有begin
# do something that generates an exception
rescue => exception
# handle the exception
end
,begin
或rescue
的{{1}}无效。
此外,这与previous question非常相似。