我如何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
问题是标准输出缓冲。'HCItool Lescan' 不会在每个新发现的设备后刷新其输出,它只是用""打印它们(至少在我正在查看的 bluez 5.27 源中)。默认情况下,如果 stdout 是终端,则缓冲会自动设置为"线路缓冲",否则设置为缓冲(有关完整说明,请参阅此处)。因此,例如,当您将 hcitool 的输出重定向到 grep 时,它是缓冲的。如果等待足够长的时间,您将看到 grep 的预期输出。为了克服这个问题,您可以使用stdbuf运行带有stdout行缓冲的hcitool:
$stdbuf -oL hcitool lescan | grep B
确保使用 sudo
运行:
$ sudo stdbuf -oL hcitool lescan | grep <pattern>