bash - serial - terminal serie linux
Script Bash: guarde la secuencia del puerto serie(/ dev/ttyUSB0) en el archivo hasta que aparezca una entrada especĂfica(por ejemplo, eof) (1)
Necesito una secuencia de comandos bash para leer la secuencia de datos desde un puerto serie (RS232 a adaptador USB - Puerto: / dev / ttyUSB0). Los datos deben almacenarse línea por línea en un archivo hasta que aparezca una entrada específica (por ejemplo, "eof"). Puedo dar cualquier entrada externa al puerto serie. Hasta ahora uso cat para leer los datos, lo que funciona bien.
cat /dev/ttyUSB0 -> file.txt
El problema es que necesito terminar el comando yo mismo al ingresar cntr + C, pero no sé exactamente cuándo termina la secuencia de datos y el archivo ttyUSB0 no genera un EOF. Traté de implementarlo yo mismo, pero no encontré una solución conveniente. El siguiente comando funciona, pero no sé cómo usarlo para mi problema ("world" creará un error de "comando no encontrado"):
#!/bin/bash
cat > file.txt << EOF
hello
EOF
world
El siguiente código funciona para mi problema, pero lleva demasiado tiempo (la secuencia de datos consta de ~ 2 millones de líneas):
#!/bin/bash
while read line; do
if [ "$line" != "EOF" ]; then
echo "$line" >> file.txt
else
break
fi
done < /dev/ttyUSB0
¿Alguien tiene una posibilidad conveniente para mi problema?
Pruebe awk(1)
:
awk `
/EOF/ {exit;}
{print;}` < /dev/ttyUSB0 > file.txt
Esto se detiene cuando ve la línea EOF
e imprime todo lo demás en file.txt