9

我如何 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
4

2 回答 2

10

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

$stdbuf -oL hcitool lescan | grep B

于 2016-03-10T09:29:04.993 回答
1

确保运行sudo

$ sudo stdbuf -oL hcitool lescan | grep <pattern>
于 2017-05-18T21:32:10.013 回答