次のようなものを使用して、マシンが 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
、-q
heemayl の提案どおりに使用してください。
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
これは、ThinkPad が grep によって見つかった場合は true を返し、見つからない場合は false を返します。
答え4
sudo dmidecode | grep -c ThinkPad | xargs test 0 -lt
必要な結果を得るには、xargs
andコマンドとそのオペランドを再配置する必要があります。 ゼロ以外の (>0) の ThinkPad 構成行がある場合、これは true ステータスを返します。test
あるいは、テストコマンドのオペランドの順序を保持したい場合は、次のようにします。
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