我正在尝试编写一个bash脚本来轮询btmon的设备连接。我有一个可行的解决方案,但是它的运行速度非常慢,而且看起来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套件的一部分,是一个蓝牙监视工具,而cec-client是libCEC附带的实用程序,用于通过HDMI-CEC串行总线发布命令(以及其他操作)。
btmon每秒输出约250个字符。
—
罗布
@ l0b0我尝试使用unbuffer命令禁用缓冲,但是这似乎完全阻止了grep退出?我还尝试将grep强制设为--line-buffer模式,但这似乎无济于事。
—
罗布
可能是自己
—
l0b0
btmon
实现了缓冲,在这种情况下,您很不走运。
btmon
输出多少“东西” ?您确定这不只是缓冲问题吗?