开发者

grep 5 seconds of input from the serial port inside a shell-script

开发者 https://www.devze.com 2022-12-15 05:24 出处:网络
I\'ve got a device that I\'m operating next to my PC and as it runs it\'s spitting log lines out it\'s serial port. I have this wired to my PC and I can see the log lines fine if I\'m using either min

I've got a device that I'm operating next to my PC and as it runs it's spitting log lines out it's serial port. I have this wired to my PC and I can see the log lines fine if I'm using either minicom or something like:

ttylog -b 115200 -d /dev/ttyS0

I want to write 5 seconds of the device serial output to a temp file (or assign it to a variable) and then later grep that file for keywords that will let me know how the device is operating. I've already tried redirecting the output to a file while running the command in the background, and then sleeping 5 seconds and killing the process, but the log lines never get written to my temp file. Example:

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

The file gets created but never filled with any data. I can also replace the ttylog line with:

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

In neither case do I ever see any log lines logged to stdout or the log file unless I have multiple versions of ttylog running by mistake (see commented out line, D'oh).

I have no idea what's going on here. It seems to be a failure of redirection within my script.

Am I on the right track? Is there a better way to sample 5 seco开发者_如何学Cnds of the serial port?


It sounds like maybe ttylog is buffering its output. Have you tried running it with -f or --flush?


You might try the unbuffer script that comes with expect.


ttylog has a --timeout option, where you can simply specify for how many seconds it should run.

So, in your case, you could do

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

and it would just run for 5 seconds and then stop. Indeed it also has the -f option as mentioned which flushes, but if you'd use --timeout you would not be needing that.

0

精彩评论

暂无评论...
验证码 换一张
取 消