No Cygwin, estou tentando ler a entrada da porta serial, filtrá-la para remover caracteres nulos e salvar a saída em um arquivo. Algo como o seguinte, que resulta em um arquivo de log vazio:
cat /dev/ttyS1 | tr -d '\000' >myfile.log
Isso mostra stdout no terminal:
cat /dev/ttyS1 | tr -d '\000'
Eu tentei usar stdbuf -oL -eL
por esta postagem , sem sucesso.
Pontos bônus se você conseguir que ele funcione com o stdout de filtragem do grep no terminal (ou seja, registre tudo no arquivo, mas veja apenas a saída filtrada no terminal).
cat /dev/ttyS1 | tr -d '\000' | tee myfile.log | egrep --line-buffered "WARN|ERROR"
Nota: A porta serial que estou usando é um adaptador serial USB FTDI.
eu usei
—
mrtumnus
/dev/ttyS1
como um exemplo. A porta serial que estou usando nesta máquina em particular é diferente e existe (eu posso ler a entrada usando cat /dev/ttyS1
).
E se
—
matzeri
cat /dev/ttyS1
obras e cat /dev/ttyS1 | tr -d '\000'
produz nada parece sua porta serial está produzindo apenas nulo
@matzeri Não, está produzindo texto regular com nulos inseridos antes de "\ r \ n" em cada linha. Eu acho que pode ser devido a fonte dos dados seriais é escrito em C, que usa terminadores nulos para seqüências de caracteres. Mas vamos supor que não tenho controle sobre isso. Como eu removo os nulos e salvo no arquivo?
—
mrtumnus
Funciona se você dividir a ação em dois:
—
matzeri
cat /dev/ttyS1 > tempfile
e cat tempfile | tr -d '\000'
?
/dev/ttyS1
existir ?