2009-12-29 83 views
2

我有一台设备在我的PC旁边运行,当它运行时它正在将它的串行端口吐出日志行。我有这样的有线到我的电脑,我可以看到日志行的罚款,如果我使用的是无论是小型机或类似的东西:grep从shell脚本内的串行端口输入5秒钟

ttylog -b 115200 -d /dev/ttyS0 

我要5秒设备串行输出写入到一个临时文件(或将它分配给一个变量),然后在那个文件中找到关键字,让我知道设备的运行方式。我已经尝试将输出重定向到一个文件,同时在后台运行该命令,然后休眠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 & 

在两种情况下我见过的任何日志行记录到标准输出或日志文件,除非我有错ttylog运行的多个版本(见注释行,d '哦)。

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

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

+0

为什么不给每个第N行添加一个时间戳并记录104秒的数据,然后使用某个实用程序将它分成20-21个块? – 2009-12-29 22:09:09

+0

如果你添加'jobs -l; 'serialPID = $!'后的echo $ serialPID'是否匹配PID? – 2009-12-29 22:53:53

+0

@lpthnc我有1到200个命令可以发布,其中任何一个命令都可能向push-pop堆栈中添加更多命令,所以我只想一次处理一个命令。 该脚本还可以运行The Box并自动发出正在测试的命令。我真的想保持在“开始录音 - 发布命令 - 停止录制 - grep获得结果 - 更新统计信息”算法 – pica 2009-12-29 23:51:44

回答

3

听起来好像ttylog缓冲其输出。你有没有试过用-f或--flush运行它?

+0

-f不是ttylog的有效标志,或者我不明白你的问题? – pica 2009-12-30 00:23:18

+0

我只是在http://rocasa.org/ttylog – 2009-12-30 01:30:23

+0

D'oh寻找资料。 'strings/usr/sbin/ttylog'将-f选项显示为可用,但它不在手册页中。我会试一试。 – pica 2009-12-30 15:37:13

0

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

+0

很快就会检查出来。看起来很有希望。我做了,但是在David Norman建议的-f选项中找到了一个更简单的解决方案。 – pica 2009-12-30 17:33:54