stdbuf não funciona enquanto o unbuffer não

4

Estou tentando aplicar carimbos de data / hora a stdout de um processo. Para que os timestamps apropriados sejam aplicados, tento unbuffer stdout do processo. Isso funciona com unbuffer , mas não com stdbuf , como seria de se esperar. Considere o seguinte script de impressão lenta ' slowprint ':

#!/bin/bash

if [ $# -ne 2 ]; then
   echo "usage: ${0%%/*} <file> <delay in microseconds>"
   exit 1
fi

DELAY=$2 perl -pe 'BEGIN{use Time::HiRes qw(usleep)} { usleep($ENV{DELAY}) }' $

agora compare as seguintes tentativas para aplicar carimbos de data e hora:

stdbuf -oL ./slowprint <(ls) 100000 | 
awk '{ print strftime("%H:%M:%S"), $0; fflush(); }'

vs

unbuffer ./slowprint <(ls) 100000 | 
awk '{ print strftime("%H:%M:%S"), $0; fflush(); }' 
O segundo funciona para mim enquanto o primeiro não funciona, embora eu espere que eles façam a mesma coisa. Atualmente unbuffer é inadequado porque engloba códigos de erro em certas circunstâncias, (postei uma pergunta separada sobre esse comportamento ).

    
por frankc 15.04.2014 / 21:03

1 resposta

1

Experimente annotate-output . Ele fornece registros de data e hora para STDIN , STDOUT e STDERR .

Um exemplo, use wc para fazer uma contagem de linha de uma substituição de processo bash , (uma linha) e um arquivo inexistente:

annotate-output wc -l <(echo foo) nosuchfile

Saída:

10:17:45 I: Started wc -l /dev/fd/63 nosuchfile
10:17:45 O:       1 /dev/fd/63
10:17:45 E: wc: nosuchfile: No such file or directory
10:17:45 O:       1 total
10:17:45 I: Finished with exitcode 1
    
por 09.09.2016 / 04:26