获取不存在的系统用户信息,而不输出
这是我的代码,让所有系统用户:获取不存在的系统用户信息,而不输出
def get_all_system_users
user_paths = Dir["#{ENV['HOME']}/../*"]
users = user_paths.map { |path| path.split("..")[-1].gsub(/\W/, '') }
users.select { |user| %x{id #{user}}.include?("uid") }
end
的问题是ID#{用户}命令,该命令将返回不存在用户的输出气泡所有方式,完全像一个put或pp
我怎样才能使它静音,但仍评估命令的输出?
我宁愿一个更直接的方式:(编辑:更新了OSX的工作,我认为)
def get_all_system_users
`dscacheutil -q user|grep name:|cut -d: -f2`.split
end
或者同时处理多个操作系统:
require 'rbconfig'
def get_all_system_users
case RbConfig::CONFIG['host_os']
when /mac|darwin/i
`dscacheutil -q user|grep name:|cut -d: -f2`.split
when /linux/i
`cat /etc/passwd|grep "/home"|cut -d: -f1`.split
else
raise "InferiorOS Error" #or whatever
end
end
您可以尝试重定向标准错误到标准输出(或开发/空),但它取决于你的shell:
%x{id #{user} 2>&1}
..和你将需要检测时,实用程序返回的故障代码:
if $?.success?
是的,你已经钉了它!非常感激。 – Gerhard 2010-11-01 10:18:16
它更容易只是解析/etc/passwd
文件:
Hash[File.readlines('/etc/passwd').map { |line|
line.split ':'
}.select { |field|
field[5].index('/home/') == 0 && File.directory?(field[5])
}.map { |field|
[field[0], field[2].to_i]
}]
这将返回一个哈希值与用户名关键和UID作为价值 所有具有/home/
下的主目录的用户。
这看起来棒极了,如果我不想要OS X的支持,这简直太棒了! – Gerhard 2010-11-01 10:15:29
扫描/ etc/passwd文件不是更容易吗? (如果OSX有这个文件) – Arsen7 2010-10-29 11:15:05
是的,但是,OS X不会将系统用户存储在/ etc/passwd中。我看的第一个地方; )。谢谢! – Gerhard 2010-11-01 10:14:42