我需要一个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
有没有人方便我的问题?
答案 0 :(得分:5)
尝试awk(1)
:
awk `
/EOF/ {exit;}
{print;}` < /dev/ttyUSB0 > file.txt
当它看到行EOF
并将其他所有内容打印到file.txt