我正在尝试检查机器是否是 ThinkPad 或不使用类似这样的东西:
sudo dmidecode | grep ThinkPad
我希望最终结果返回 true 或 false(或 1/0)。
我想解决方案可能是这样的:
sudo dmidecode | grep -c ThinkPad | test xargs -gt 0
但我不确定xargs
这里如何正确使用。
答案1
只需在 后面添加退出状态检查grep
,默认情况下它将始终从管道的最后一个命令获取退出状态:
sudo dmidecode | grep -q ThinkPad; echo $?
用于-q
抑制任何输出,grep
因为我们只对退出状态感兴趣。
如果您愿意,可以使用命令分组,但这在这里有些多余:
sudo dmidecode | { grep -q ThinkPad; echo $? ;}
答案2
如果您打算使用带有if
检查功能的 shell 脚本,只需按照 heemayl 的建议使用即可-q
:
if sudo dmidecode | grep -q Thinkpad
then
echo "I'm a Thinkpad"
fi
由于该if
块检查命令的退出状态,因此我们可以grep
直接依赖 的退出状态,而不是打印$?
并将其与其他内容进行比较。
答案3
灵感来自希梅尔的回答:
sudo dmidecode | grep -q ThinkPad && echo true || echo false
如果 grep 找到 ThinkPad,则返回 true,否则返回 false。
答案4
sudo dmidecode | grep -c ThinkPad | xargs test 0 -lt
您需要重新排列xargs
andtest
命令及其操作数才能获得您想要的结果。如果有非零 (>0) ThinkPad 组成线路,则这将返回 true 状态。
或者,如果您想保留测试命令的操作数顺序,您可以这样做
sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0
然后,在两个命令中,检查$?
变量的值来确定 grep 成功/失败的命运,如下所示:
if sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0; then
echo "success hooray!"
else
echo nothing
fi