Imprime stderr somente se nada for gravado no stdout, caso contrário, imprima apenas stdout descartando stderr

2

Existe um comando que sempre imprime coisas para stderr. Tais informações nunca são úteis, exceto quando não escrevem nada para o stdout.

Então, existe uma maneira simples de shell, ferramenta ou comando para ajudar a filtrar stdout e stderr a partir do comando e canalizá-los para que a saída stderr antiga seja impressa para stderr somente se a saída stdout anterior estiver vazia, caso contrário (quando stdout é não vazio) apenas imprime stdout?

    
por pepper_chico 02.07.2016 / 00:47

1 resposta

3

Você pode redirecioná-los para arquivos temporários e (em um script) verificar se algo foi gravado na saída padrão.

Algo como

#!/bin/sh
mytemp=$(mktemp -d)
trap "rm -rf $mytemp" EXIT INT QUIT HUP
"$@" 2>$mytemp/error | tee $mytemp/output
[ -s $mytemp/output ] || cat $mytemp/error
    
por 02.07.2016 / 01:11