所以我有一个带有这种输出的shell命令:
sqoop-client - 2.6.4.0-91
sqoop-server - 2.6.4.0-91
storm-slider-client - 2.6.4.0-91
tez-client - 2.6.4.0-91
zookeeper-client - 2.6.4.0-91
zookeeper-server - 2.6.4.0-91
我想将此输出(服务名称和服务版本)存储在一个数组中,然后返回所有对象。
此刻,在我的代码中,我已经返回了一些固定值,如:
#code :
return {
hdp_version: Facter::Core::Execution.execute('/usr/bin/hdp-select versions | tail -1'),
sqoop: File.exist?('/etc/sqoop'),
}
#output :
{
hdp_version => "2.6.4.0-91",
sqoop => false
}
如何将shell命令的输出存储在2D数组中,并像上面的示例一样解析所有值以返回它们?
像这样(但循环):
obj[0][0] : obj[0][1],
obj[1][0] : obj[1][1],
[...]
谢谢
答案 0 :(得分:2)
考虑到您有这样的输出,您只需要迭代输出中的每一行,用" - "
拆分该行并将其存储在结果哈希中:
libs = "sqoop-client - 2.6.4.0-91\n" \
"sqoop-server - 2.6.4.0-91\n" \
"storm-slider-client - 2.6.4.0-91\n" \
"tez-client - 2.6.4.0-91\n" \
"zookeeper-client - 2.6.4.0-91\n" \
"zookeeper-server - 2.6.4.0-91\n"
libs_with_versions = libs.each_line.with_object({}) do |line, result|
lib, version = line.strip.split(" - ")
result[lib] = version
end
puts libs_with_versions
返回:
{
"sqoop-client" => "2.6.4.0-91",
"sqoop-server" => "2.6.4.0-91",
"storm-slider-client" => "2.6.4.0-91",
"tez-client" => "2.6.4.0-91",
"zookeeper-client" => "2.6.4.0-91",
"zookeeper-server"=>"2.6.4.0-91"
}