Bash脚本:将串行端口(/ dev / ttyUSB0)中的流保存到文件,直到出现特定输入(例如eof)

时间:2012-11-15 10:07:13

标签: bash serial-port eof cat

我需要一个bash脚本来从串行端口读取数据流(RS232到USB适配器 - 端口:/ dev / ttyUSB0)。数据应逐行存储在文件中,直到出现特定输入(例如“eof”)。我可以给串口提供任何外部输入。 直到现在我用cat来读取数据,这很好。

cat /dev/ttyUSB0 -> file.txt

问题是,我需要输入cntr + C来自己完成命令,但我不确切知道数据流何时结束且ttyUSB0文件没有生成EOF。我试图自己实现这个,但没有找到一个方便的解决方案。 以下命令有效,但我不知道如何将它用于我的问题(“world”将创建“未找到命令”错误):

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

以下代码适用于我的问题,但需要花费太多时间(数据流包含约200万行):

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

有没有人方便我的问题?

1 个答案:

答案 0 :(得分:5)

尝试awk(1)

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

当它看到行EOF并将其他所有内容打印到file.txt

时停止