Você não precisa tail -f
a tty. Se estiver enviando EOF ou, se for buffer de linha, você precisará configurá-lo.
stty -F/dev/ttyAPP2 raw
Agora você pode ...
cat /dev/ttyAPP2
... conforme necessário ...
Você pode tentar ...
</dev/ttyAPP2 \
dd bs=16 conv=sync | od -vtx1
... que sincronizará todos os read()
do seu dispositivo em blocos de 16 bytes, preenchidos com nulo, e assim escreverá a saída com buffer de linha (como no seu terminal) em tempo real, independentemente da taxa de transferência, embora quaisquer valores nulos à direita possam distorcer seu fluxo.
Com o GNU stdbuf
e um od
:
stdbuf -o0 od -vtx1 </dev/ttyAPP2
... gravaria a saída em tempo real, independentemente disso.
Você também pode armazenar em buffer para um arquivo temporário como ...
f=$(mktemp)
exec 3<>"$f"; rm -- "$f"
while dd >&3 of=/dev/fd/1 bs=4k count=1
[ -s /dev/fd/3 ]
do od -An -vtx1 /dev/fd/3
echo
done </dev/ttyAPP2 2>/dev/null
... que, embora provavelmente não seja tão eficiente quanto as outras recomendações, pode valer a pena considerar se você quiser delimitar as leituras do seu dispositivo por EOF. Eu acho a técnica útil às vezes ao trabalhar com ttys, de qualquer maneira.
Também é possível forçar hexdump
a imprimir menos bytes usando o formato de impressão personalizado. O exemplo abaixo será impresso toda vez que houver 4 bytes disponíveis:
hexdump -e '4/1 "%02x " "\n"' < /dev/ttyAPP2