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



我需要一个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

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

尝试awk(1)

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

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

相关内容

  • 没有找到相关文章

最新更新