bash:在继续之前等待特定的命令输出

alv*_*rna 5 bash wait bluetooth-lowenergy

我知道有几个帖子问类似的问题,但没有一个解决我遇到的问题。

我正在处理一个脚本,该脚本处理与不同Bluetooth low energy设备的连接,使用它们的一些句柄读取gatttool并动态创建一个.json包含这些值的文件。

我遇到的问题是gatttool命令需要一段时间才能执行(并且由于device is busy或类似的消息并不总是成功连接到设备)。这些“错误”不仅转换为错误的数据以填充.json文件,而且还允许脚本行继续写入文件(例如添加额外的}或类似的)。我正在使用的命令示例如下:

sudo gatttool -l high -b <MAC_ADDRESS> --char-read -a <#handle>
Run Code Online (Sandbox Code Playgroud)

我怎样才能以一种可以等待某个输出的方式来解决这个问题?在这种情况下,--char-read使用时的理想输出gatttool是:

Characteristic value/description: some_hexadecimal_data`
Run Code Online (Sandbox Code Playgroud)

通过这种方式,我可以确保我是逐行跟踪脚本而不是进行这些“跳转”。

Dev*_*lar 4

grep允许您过滤gatttool您正在查找的数据的输出。

如果您实际上正在寻找一种方法来等待遇到特定输出后再继续,那么Expect可能就是您正在寻找的。

从联机帮助页:

expect [[-opts] pat1 body1] ... [-opts] patn [bodyn]
         waits  until  one of the patterns matches the output of a spawned
         process, a specified time period has passed, or an end-of-file is
         seen.  If the final body is empty, it may be omitted.
Run Code Online (Sandbox Code Playgroud)