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)
有没有人方便我的问题?
试试awk(1):
awk `
/EOF/ {exit;}
{print;}` < /dev/ttyUSB0 > file.txt
Run Code Online (Sandbox Code Playgroud)
当它看到该行EOF并将其他所有内容打印到时,它会停止file.txt