grep从shell脚本中的串口输入5秒

时间:2009-12-29 22:01:37

标签: bash shell serial-port

我有一台设备,我正在我的电脑旁边操作,因为它运行它的吐出日志线,它的串口。我有这个连接到我的电脑,如果我使用minicom或类似的东西,我可以看到日志行正常:

ttylog -b 115200 -d /dev/ttyS0

我想将5秒的设备串行输出写入临时文件(或将其分配给变量),然后再将该文件grep用于关键字,让我知道设备的运行方式。我已经尝试在后台运行命令时将输出重定向到文件,然后睡5秒并终止进程,但日志行永远不会写入我的临时文件。例如:

touch tempFile
ttylog -b 115200 -d /dev/ttyS0 >> tempFile &
serialPID=$!
sleep 5
#kill ${serialPID} #does not work, gets wrong PID
killall ttylog
cat tempFile

文件已创建但从未填充任何数据。我也可以用:

替换ttylog行
ttylog -b 115200 -d /dev/ttyS0 |tee -a tempFile & 

在任何一种情况下,我都没有看到任何记录到stdout或日志文件的日志行,除非我错误地运行了多个版本的ttylog(参见注释掉的行,D'oh)。

我不知道这里发生了什么。这似乎是我的脚本中的重定向失败。

我是否在正确的轨道上?有没有更好的方法来采样5秒的串口?

3 个答案:

答案 0 :(得分:3)

听起来好像ttylog正在缓冲其输出。您是否尝试使用-f或--flush运行它?

答案 1 :(得分:0)

您可以尝试unbuffer附带的expect脚本。

答案 2 :(得分:0)

ttylog有一个--timeout选项,您可以在其中简单指定它应该运行多少秒。

因此,您可以这样做

ttylog --baud 115200 --device /dev/ttyS0 --timeout 5

,它将运行5秒钟,然后停止。 实际上,它还具有上述提到的-f选项,可以进行刷新,但是如果您使用--timeout,则不需要。