Algumas maneiras de abordar isso.
-
mesclar fluxos
Você poderia passar determinando a diferença todos juntos e simplesmente mesclar STDERR e STDOUT.
Exemplo
quodlibet --status 2>&1 | ... -
use grep
Você poderia reduzir a saída usando
-o&-Emuda paragrep.Exemplo
$ echo "...blah not-running blah..." | grep -Eo "not-running|paused|playing" not-running $ echo "...blah paused blah..." | grep -Eo "not-running|paused|playing" paused $ echo "...blah playing blah..." | grep -Eo "not-running|paused|playing" playingIsso cortará tudo, exceto as strings que correspondem ao argumento regex para
grep. -
determine o tipo do fluxo
Você pode usar a opção
-tpara determinar o tipo de fluxo do descritor de arquivo.trecho da página man do Bash
-t fd True if file descriptor fd is open and refers to a terminal.
where fd is one of:
0: stdin
1: stdout
2: stderrExemplo
Isso detecta se a saída está vindo do STDOUT.
$ if [ -t 1 ]; then echo "from STDOUT"; fi from STDOUTRetorna "de STDOUT", pois a saída está chegando enquanto:
$ (if [ -t 1 ]; then echo "from STDOUT"; fi) | catNão retorna nada, pois a saída está sendo direcionada para
cat.