O mesmo tempo vem do buffering. Tente encontrar o comando que armazena na fila e
experimente o comando unbuffer
.
Estou executando um script que é fornecido abaixo
sudo hexdump -v -e '1/1 "%02x\n"' /dev/ttyUSB0 | Many Pipes | gawk '{ print strftime(":: %s"), $0 }'
Aqui os dados estão sendo descartados com o registro de data e hora e são fornecidos abaixo
:: 1461680718 ::ED.DATA
:: 1461680718 ::ED.DATA
:: 1461680718 ::ED.DATA
:: 1461680718 ::ED.DATA
:: 1461680718 ::ED.DATA
:: 1461680718 ::ED.DATA
:: 1461680719 ::ED.DATA
Como você pode ver, o tempo não muda para todos os pacotes. Eu acho que é porque eu estou despejando os dados em vez de fazer a linha de leitura. Existe alguma maneira de script e certifique-se de obter valor diferente para cada pacote (em segundos)
O mesmo tempo vem do buffering. Tente encontrar o comando que armazena na fila e
experimente o comando unbuffer
.
Eu tentei o seguinte em um jessie pi e não tive nenhum problema com stdbuf -oL
na frente do hexdump trabalhando como pretendido.
while sleep .5;do echo -n x;done |
stdbuf -oL hexdump -v -e '1/1 "%02x\n"' |
ts %.s |
cat
O while
é para simular entrada lenta, ts
marca o tempo de cada linha e o cat
é apenas para fornecer outro canal. A saída é regular e os timestamps diferem em cerca de 0,5 segundos, após as primeiras 2 linhas. O comando ts
é do pacote moreutils
.
Tente usar stdbuf -oL
em cada um dos seus comandos no canal.
Tags bash awk sed linux shell-script