デバイスが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
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
コマンドとそのオペランドを並べ替える必要があります。test
0以外(> 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