Сценарий 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