2016-03-09 5 views
6

Как я могу вывести вывод «hcitool lescan» или, если на то пошло, это что угодно. Кажется, когда я что-то делаю из «hcitool lescan», я не получаю выход.Grep hcitool lescan output

[email protected]:/mnt/rtd# hcitool lescan |grep B 

^[email protected]:/mnt/rtd# hcitool lescan | tee foo 

^[email protected]:/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

Проблема заключается в буферизации stdout. «hcitool lescan» не выводит свои выходные данные после каждого нового найденного устройства, он просто печатает их с помощью «\ n» (по крайней мере, в синих источниках 5.27, которые я просматриваю). По умолчанию, если stdout является терминалом, тогда для буферизации автоматически устанавливается «line buffered», иначе он настроен на буферизацию (см. here для полного описания). Следовательно, когда вы перенаправляете вывод hcitool на grep, например, он буферизуется. Если вы подождете достаточно долго, вы увидите ожидаемый результат grep. Чтобы преодолеть это, вы можете использовать stdbuf запустить hcitool с стандартный вывод строки буферизации:

$ stdbuf-ола hcitool lescan | Grep B

+0

К сожалению, я, кажется, не имеют stdbuf на интел Edision/Yocto coreutilities, и не понял, где найти их. –

0

убедитесь, что работать с sudo:

$ sudo stdbuf -oL hcitool lescan | grep <pattern> 
+0

, не связанный с вопросом OP, но я нашел полезным установить пакет 'moreutils' и использовать команду' ts' для отметки времени каждой записи: 'sudo stdbuf -oL hcitool lescan --duplicates | ts | grep ' – kaptan

 Смежные вопросы

  • Нет связанных вопросов^_^