Como evitar o buffer de E / S para comandos canalizados

0

A seguinte cadeia de comandos é para

  1. ping com datestamp (UNIX),

  2. converta o registro de data do UNIX em um formato mais legível e

  3. saída para o terminal e um arquivo de log.

ping -D localhost 2>&1 | sed 's/^\[\([0-9]*\.[0-9]*\)\]\(.*$\)/echo "['date -d @ +"%Y-%m-%d %H:%M:%S"'] "/e' | tee -a ping.log

O problema é que, como está escrito, a saída parece estar em buffer em pedaços de quase um minuto ou ~ 50 linhas, ao contrário da saída usual de segundo a segundo e linha por linha do ping.

O que está causando o buffering e como ele pode ser evitado?

    
por adatum 11.09.2018 / 02:55

1 resposta

2

Se estiver disponível em seu sistema, use unbuffer . Deve ser tão fácil quanto:

unbuffer ping -D localhost 2>&1 | unbuffer sed 's/^\[\([0-9]*\.[0-9]*\)\]\(.*$\)/echo "['date -d @ +"%Y-%m-%d %H:%M:%S"'] "/e' | tee -a ping.log
    
por 11.09.2018 / 03:06

Tags