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

use*_*048 6 bash serial-port cat eof

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

cat /dev/ttyUSB0 -> file.txt
Run Code Online (Sandbox Code Playgroud)

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

#!/bin/bash
cat > file.txt << EOF
hello
EOF
world
Run Code Online (Sandbox Code Playgroud)

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

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

有没有人方便我的问题?

Aar*_*lla 5

试试awk(1):

awk `
/EOF/ {exit;} 
 {print;}` < /dev/ttyUSB0 > file.txt
Run Code Online (Sandbox Code Playgroud)

当它看到该行EOF并将其他所有内容打印到时,它会停止file.txt