デバイス接続のbtmonをポーリングするbashスクリプトを作成しようとしています。私は実用的なソリューションを持っていますが、それはばかげて遅いです、そして、問題はgrepがマッチを見つけた後に終了するのが非常に遅いようです(約25秒)。高速化grep
するか、まったく使用しないようにするにはどうすればよいですか?
#!/bin/bash
COUNTER=0
while :
do
until btmon | grep -m 1 '@ Device Connected'
do :
done
let COUNTER=COUNTER+1
echo on 0 | cec-client RPI -s -d 1
sleep 5
echo as | cec-client RPI -s -d 1
until btmon | grep -m 1 '@ Device Disconnected'
do :
done
let COUNTER=COUNTER-1
if [ $COUNTER -eq 0 ];
then echo standby 0 | cec-client RPI -s -d 1;
fi
done
編集:明確にするためbtmon
に、Bluezスイートの一部であるbluetooth監視ツールであり、cec-clientは(特に)HDMI-CECシリアルバスを介してコマンドを発行するためのlibCECにパッケージ化されたユーティリティです。
btmonは毎秒約250文字を出力します。
—
ロブ
@ l0b0 unbufferコマンドを使用してバッファリングを無効にしようとしましたが、grepがまったく終了しないようです。また、grepを--line-bufferモードに強制しようとしましたが、それは役に立たなかったようです。
—
ロブ
btmon
バッファリング自体を実装している可能性がありますが、その場合は運が悪いです。
btmon
出力されますか?バッファリングだけの問題ではないのですか?