Сценарий Bash: сохранить поток из последовательного порта (/dev/ttyUSB0) в файл до появления определенного ввода (например, eof)

мне нужен сценарий bash для чтения потока данных из последовательного порта (RS232 в USB-адаптер-порт: /dev / ttyUSB0). Данные должны храниться строка за строкой в файле до появления определенного ввода (например, "eof"). Я могу дать любой внешний вход последовательному порту. До сих пор я использую cat для чтения данных, что отлично работает.

cat /dev/ttyUSB0 -> file.txt

проблема в том, что мне нужно закончить команду самостоятельно, введя cntr+C, но я точно не знаю, когда заканчивается поток данных и ttyUSB0 файл не гериназа в ВФ. Я попытался реализовать это сам, но не нашел удобного решения. Следующая команда работает, но я не знаю, как использовать ее для моей проблемы ("мир" создаст ошибку "команда не найдена"):

#!/bin/bash
cat > file.txt << EOF
hello
EOF
world

следующий код работает для моей проблемы, но это занимает слишком много времени (поток данных состоит из ~2 миллионов строк):

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

есть ли у кого-нибудь удобная возможность для моей проблемы?

1 ответов


попробовать awk(1):

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

Это останавливается, когда он видит строку EOF и печатает все остальное file.txt