Stream grep do subprograma, não do arquivo final

0

Existe um simples liner para obter uma saída contínua de um programa em vez de apenas um arquivo?

Agora, apenas como exemplo, eu gostaria de pular linhas contendo PHPUnit nelas. Por razões óbvias, a seguinte essência não faz isso:

phpunit tests/cases | grep -v --line-buffered "PHPUnit"

Pode ser feito como um oneliner universalmente utilizável, sem funções definidas pelo usuário e por isso?

    
por Mikulas Dite 12.08.2013 / 23:10

1 resposta

5

Isso soa como a saída do seu comando phpunit está ficando em buffer (seja por PHP, o shell Bash, ou grep ). Existem algumas maneiras de descomprimir a saída para que ela seja mais responsiva.

unbuffer

Você pode tentar usar o comando unbuffer que faz parte de expect .

$ unbuffer phpunit tests/cases | grep -v --line-buffered "PHPUnit"

stdbuf

Você pode tentar usar o comando stdbuf para desativar o armazenamento em buffer.

$ stdbuf -i0 -o0 -e0 phpunit tests/cases | grep -v --line-buffered "PHPUnit"

Detalhes dos interruptores:

   -i, --input=MODE
          adjust standard input stream buffering

   -o, --output=MODE
          adjust standard output stream buffering

   -e, --error=MODE
          adjust standard error stream buffering

Portanto, o acima define o armazenamento em buffer para STDIN, STDOUT, STDERR é definido como zero.

grep

O próprio grep pode ser o culpado na saída do buffer. Você pode dizer que ele armazena apenas uma linha no valor da saída. (Este que você já mencionou / descobriu, mas estou mencionando para que futuros leitores desta Q & A entendam que também há buffering).

$ phpunit tests/cases | grep -v --line-buffered "PHPUnit"
    
por 13.08.2013 / 00:18

Tags