だから私はマシンにバッテリーがあることを確認してから、バッテリーの有無に応じて別のコマンドを実行しようとしています。これが私が今まで持っているものです:
upower -d >> /tmp/batstat
if [ grep -F BAT0 /tmp/batstat ]; then
echo "BAT0 PRESENT" >> /tmp/batstat
else
echo "NO BAT0" >> /tmp/batstat
fi
ただし、期待どおりに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
。