Grep hcitool lescan输出

时间:2016-03-09 15:02:43

标签: pipe bluetooth-lowenergy bluez intel-edison hci

如何grep'hcitool lescan'的输出或者将其输出到任何东西。似乎当我从'hcitool lescan'输出任何东西时,我都没有输出。

root@edison:/mnt/rtd# hcitool lescan |grep B

^Croot@edison:/mnt/rtd# hcitool lescan | tee foo

^Croot@edison:/mnt/rtd# hcitool lescan
LE Scan ...
B0:B4:48:xx:xx:xx (unknown)
B0:B4:48:xx:xx:xx xxxxxxxx
B0:B4:48:yy:yy:yy (unknown)
B0:B4:48:yy:yy:yy yyyyyyyy

2 个答案:

答案 0 :(得分:5)

问题是stdout缓冲。 ' hcitool lescan'在每个新发现的设备之后不会刷新其输出,它只是用' \ n'打印它们。 (至少在bluez 5.27来源中,我正在观察)。默认情况下,如果stdout是终端,则缓冲自动设置为“缓冲行”,否则将其设置为缓冲(有关完整说明,请参阅here)。 因此,例如,当您将hcitool的输出重定向到grep时,它会被缓冲。如果你等待足够长的时间,你会看到grep的预期输出。 要解决这个问题,你可以使用 stdbuf 运行带有stdout line-buffering的hcitool:

  

$ stdbuf -oL hcitool lescan | grep B

答案 1 :(得分:0)

确保使用sudo

运行
$ sudo stdbuf -oL hcitool lescan | grep <pattern>