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

6

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

cat /dev/ttyUSB0 -> file.txt

问题在于我需要通过输入ctrl+C来完成命令,但我不知道数据流何时结束,而且ttyUSB0文件没有生成EOF。我尝试过自己实现,但没有找到方便的解决方案。 以下命令可以使用,但我不知道如何将其用于我的问题("world"会创建一个"command not found"错误):
#!/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个回答

5
尝试使用awk(1)命令:
awk `
/EOF/ {exit;} 
 {print;}` < /dev/ttyUSB0 > file.txt

这将在遇到EOF行时停止,并将其他所有内容打印到file.txt中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接