我正在嘗試檢查機器是否是 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