Fechar o comando cat depois de gravar o arquivo

2

No momento, estou tentando ler um dispositivo conectado ao computador usando a porta USB.

Aqui está o meu código:

stty -F /dev/ttyUSB0 9600 cs8 && cat -v < /dev/ttyUSB0 > /path/to/folder/file.txt

, que funciona como um encanto até ver a saída. A única coisa que não o torna perfeito é o fato de que, após a saída gravada em um arquivo, o comando ainda está ouvindo a porta (não o fechamento automático), então eu tenho que pressionar Ctrl + C manualmente.

Então, o que devo fazer para fechar automaticamente o comando (por exemplo, pressionar Ctrl + C)?

Muito obrigado.

    
por thom 08.10.2013 / 06:35

1 resposta

1

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 %%
    
por zwets 08.10.2013 / 08:51