bash脚本:从串行端口(的/ dev / ttyUSB0)存储流到文件直到一个特定的输入(例如EO

2019-07-03 20:11发布

我需要一个bash脚本来读取串行端口(RS232转USB适配器 - 端口是:/ dev / ttyUSB0)的数据流。 该数据应存储逐行在一个文件中,直到一个特定的输入(例如,“EOF”)出现。 我可以给任何外部输入到串行端口。 直到现在我用猫来读取数据,工作正常。

cat /dev/ttyUSB0 -> file.txt

问题是,我需要通过输入CNTR + C完成命令自己,但我不知道什么时候数据流结束,ttyUSB0文件不gerenate的EOF。 我想这个实现自己,但没有找到一个方便的解决方案。 下面的命令工作,但我不知道如何使用它我的问题(“世界”将创建一个“命令未找到”错误):

#!/bin/bash
cat > file.txt << EOF
hello
EOF
world

下面的代码适用于我的问题,但它需要太多的时间(数据流由约2万行):

#!/bin/bash
while read line; do
     if [ "$line" != "EOF" ]; then
          echo "$line" >> file.txt
     else
          break
     fi
done < /dev/ttyUSB0

有没有人方便的可能性,我的问题?

Answer 1:

尝试awk(1)

awk `
/EOF/ {exit;} 
 {print;}` < /dev/ttyUSB0 > file.txt

这将停止时,看到行EOF并打印其他一切file.txt



文章来源: Bash script: save stream from Serial Port (/dev/ttyUSB0) to file until a specific input (e.g. eof) appears