我正在尝试将系统上的用户添加为木偶事实。我不是 ruby 程序员,下面的代码可以正确生成用户,但他们的 uid 都是一样的(密码文件中最后一个条目的 uid)。如果 uid 超出范围,我预计会出现未知符号错误,如果 Facter.add 最后只被调用一次,我预计只有一个用户,即最后一个用户,与 uid 相同。我不明白一个人如何在没有另一个人这样做的情况下进行迭代......
File.open("/etc/passwd", "r") do |passwords|
while pw_entry = passwords.gets
user, pw, uid, gid, gecos, home, shell = pw_entry.split(/:/)
Facter.add("user_" + user) do
setcode do
uid
end
end
end
end
在四处寻找时,我发现其他人几乎有相同的问题,这就是解决方案(这对我也有用):
require 'etc'
Etc.passwd { |user|
Facter.add("user_" + user.name) {
setcode {
user.uid
}
}
}
...但是我不明白有什么区别。它的作用就像对 Facter.add 块的调用被缓冲并在循环结束时一次全部运行,并且 Etc 加载了所有 passwd,因此 user.uid 索引到数组中并且时间无关紧要。但是,对于程序语言来说,这将是一件奇怪的事情......