
そこで、マシンにバッテリーがあるかどうかを確認し、バッテリーがあるかどうかに応じてさまざまなコマンドを実行しようとしています。これまでのところ、次のようになっています。
upower -d >> /tmp/batstat
if [ grep -F BAT0 /tmp/batstat ]; then
echo "BAT0 PRESENT" >> /tmp/batstat
else
echo "NO BAT0" >> /tmp/batstat
fi
しかし、これは予想どおりに NO BAT0 を /tmp/batstat に書き込むときに「bash: [: too many arguments」というエラーを返します。grep のみを実行すると正常に動作するので、if 条件として動作しない理由がわかりません。
バッテリーを確認するより良い方法があれば、私は100%それを利用します。
答え1
if upower -d | grep -qF BAT0 ; then
echo "BAT0 PRESENT"
else
echo "NO BAT0"
fi
if
一連のコマンドを受け取り、最後のコマンドのステータスに基づいて作業します。この場合は grep です。grep
一致する場合は true を返し、そうでない場合は false を返します。
答え2
grep -F BAT0 /tmp/batstat
test
は、組み込みの の条件式 (詳細なマニュアルに記載されているとおり) ではありませんbash
。 の出力はgrep
使用されない為、-q
終了コードに依存するオプションと で十分でしょう。
grep -F -q BAT0 batstat
if [[ $? -eq 0 ]]; then
echo yea
else
echo nay
fi
また、/tmp/batstat
特に悪意のあるローカルユーザーがアクセスできる場合には、これは非常に悪い選択である可能性があります。代わりに、mktemp(1)
、または の下にファイルが見つからない/tmp
。