2016-03-09 20 views
6

Wie grep ich die Ausgabe von 'hcitool lescan' oder für die Sache Rohr es zu nichts. Es scheint, wenn ich irgendetwas von 'hcitool lescan' übertrage, bekomme ich keine Ausgabe.Grep hcitool lescan Ausgabe

[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 

Antwort

4

Das Problem ist stdout Pufferung. 'hcitool lescan' spült seine Ausgabe nicht nach jedem neuen gefundenen Gerät, es druckt sie nur mit '\ n' (zumindest in bluez 5.27 Quellen, die ich gerade anschaue). Standardmäßig, wenn stdout ein Terminal ist, wird die Pufferung automatisch auf "line buffered" gesetzt, ansonsten wird es auf gepuffert gesetzt (vollständige Beschreibung siehe here). Wenn Sie beispielsweise die Ausgabe von hcitool zu grep umleiten, wird sie gepuffert. Wenn Sie lange genug warten, würden Sie die erwartete Ausgabe von grep sehen. Um dies zu überwinden Sie STDBUF laufen hcitool mit stdout Line-Pufferung verwenden können:

$ STDBUF -oL hcitool Lescan | grep B

+0

Leider ich STDBUF auf dem Intel Edision/yocto coreutilities zu haben scheinen nicht, und haben nicht herausgefunden, wo sie zu finden. –

0

stellen Sie sicher, mit sudo auszuführen:

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

unabhängig von der Frage von OP, aber ich fand es sinnvoll, 'moreutils' Paket zu installieren und verwenden Sie' ts' Befehl, um jeden Eintrag zu timestamp: 'sudo stdbuf -oL hcitool lescan --duplicates | ts | grep ' – kaptan