找到红帽子中的图形卡数量奇怪的错误

时间:2012-08-31 14:43:33

标签: ruby split

所以我知道如何找到视频卡的数量,但在我写的ruby脚本中,我有一个小小的方法来确定它:

def getNumCards
    _numGpu = %x{lspci | grep VGA}.split("\n").size
end

但已经确定我需要搜索3D以及VGA,所以我将其更改为:

def getNumCards
    _numGpu = %x{lspci | grep "VGA\|3D"}.split("\n").size
end

但是当我运行第二个时,我发现它返回0。如果我在命令行上独立运行该命令,它会显示3个视频卡(1个板载VGA和2个特斯拉NVIDIA卡作为3D卡)。我不确定分裂部分发生了什么,可能会弄乱一些东西。

任何帮助都会很棒!

干杯

2 个答案:

答案 0 :(得分:3)

man grep:

-E, --extended-regexp
...
egrep is the same as grep -E. 

所以,egrep应该有帮助

答案 1 :(得分:0)

我会从两种方式中获取此信息之一。

几乎纯粹的命令行版本是:

def getNumCards
  `lspci | grep -P '\b(?:VGA|3D)\b' | wc -l`.to_i
end

让操作系统几乎完成所有工作,但最终转换为整数。

-P '\b(?:VGA|3D)\b'是一个Perl正则表达式,它说“找到一个断字,然后寻找VGA或3D,然后是另一个断字”。这将有助于避免由于目标嵌入其他字符串而导致的任何命中。

更多Ruby版本将是:

def getNumCards
  `lspci`.split("\n").grep(/\b(?:VGA|3D)\b/).count
end

它做同样的事情,只在Ruby中完成。