gpt4 book ai didi

ruby - 使用 InSpec 检查文件内容是否存在

转载 作者:太空宇宙 更新时间:2023-11-03 16:17:27 26 4
gpt4 key购买 nike

我正在用 ruby​​ 编写 Chef InSpec 测试来检查“umask 077”的文件内容。问题是我正在检查的数组中的一些文件不存在。我试图排除 nil 文件并重新推送它们,但它似乎试图检查所有文件。有什么想法吗?

这是我的代码:

control 'auth-default-umask' do
impact 0.5
title 'Default umask'
desc 'DISA RHEL6 STIG (V1R2)'

%w(/etc/profile /etc/bashrc /etc/csh.login /etc/.login).each do |umask_file|
filecheck = []
unless umask_file == nil
filecheck.push(umask_file)
describe directory(filecheck) do
its('content') { should match /umask 077/ }
end
end
end
end

最佳答案

您正在检查文件名是否为 nil,它从来都不是,所以它自然会一直运行。如果文件不存在,您是否要排除该文件?

此外,您可能想要描述目录而不是目录列表,所以请注意我也更改了它。

最终结果如下:

control 'auth-default-umask' do
impact 0.5
title 'Default umask'
desc 'DISA RHEL6 STIG (V1R2)'

%w(/etc/profile /etc/bashrc /etc/csh.login /etc/.login).each do |umask_file|
filecheck = []
if File.exists?(umask_file) # check file existence
filecheck.push(umask_file)
describe directory(umask_file) do # describe this directory
its('content') { should match /umask 077/ }
end
end
end
end

您正确地做的是使用 %w() 创建一个文件名数组,它只是将每个单词放入其中并生成一个字符串数组(您输入的路径)。这些单独没有意义,但它们可以与类一起使用,例如 File,在文件系统上下文中变得有意义。

File.exists?(filename)例如,检查文件是否存在。

要读取一个文件,你可以使用File.open :

File.open(filename, 'r') do |file|
until file.eof?
line = file.gets
# do something with line
end
end

关于ruby - 使用 InSpec 检查文件内容是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40470779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com