O problema é saber quando parar de copiar de ttyUSB0
.
Se o final dos dados estiver marcado com um caractere ou byte reconhecível (digamos, Z ) que certamente não ocorrerá em outro lugar no fluxo de entrada, o seguinte resolverá de maneira elegante seu problema:
stty -F /dev/ttyUSB0 eof Z 9600 cs8 && cat -v < /dev/ttyUSB0 > /path/to/file.txt
Se não houver tal caractere único, mas a ocorrência de alguma sequência (digamos, END ) pode ser usada para detectar que dados suficientes foram lidos, então:
stty -F /dev/ttyUSB0 9600 cs8 && sed '/END/q' < /dev/ttyUSB0 > /path/to/file.txt
funcionaria, sob a condição de que os dados recebidos sejam orientados por linha. Ou seja, deve haver pelo menos uma nova linha após "END" ou sed
não conseguirá vê-la. (É precisamente por isso que é uma boa prática finalizar sempre os arquivos de texto com uma nova linha.)
Então, claro, há sempre o caminho mais difícil. Supondo que você saiba que o trabalho nunca levará mais de um minuto:
stty -F /dev/ttyUSB0 9600 cs8 && cat -v < /dev/ttyUSB0 > /path/to/file.txt &
sleep 60 && kill %%