Eu tenho o seguinte alias:
alias mca_color='nawk '"'"'BEGIN { arr["Creating shared object"] = "1;31";} \
{ l = $0; for (pattern in arr) \
{ gsub(".*" pattern ".*", "\033[" arr[pattern] "m&\033[0m", l); } print l; }'"'"
Eu uso aliases semelhantes para colorir outras saídas (usando mais padrões, mas isso é apenas um exemplo).
Então, esse alias funciona, se eu usá-lo assim:
$ echo "-ne Creating shared object test.so ..." | mca_color
o echo
está impresso em vermelho.MAS, quando tento:
$ make | mca_color
e até mesmo
$ make 2>&1 | mca_color
o resultado énãocolorido (e sim, make
"imprime" o mesmo texto no final da sua execução).
Alguma ideia?
Achei que poderia haver algo com processos filhos ou algo assim, mas obviamente o pipe funciona - tentei com grep
, tentei redirecionar a saída para um arquivo, tudo funciona.
Mesmo isso não funciona (o texto é impresso, mas não colorido):
$ make 2>&1 | grep 'a' | mca_color
Responder1
Finalmente descobri, quase acidentalmente.
Apareceu que havia outro alias make='colormake'
e colormake
é um script contendo:
/usr/bin/make "$@" 2>&1 | /usr/share/colormake/colormake.pl/usr/bin/make "$@" 2>&1 | /usr/share/colormake/colormake.pl
o que explica muita coisa. A remoção do alias
for colormake
corrigiu o "problema".