`nawk` "não funciona" com `make`? Por que?

`nawk` "não funciona" com `make`? Por que?

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 echoestá 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 aliasfor colormakecorrigiu o "problema".

informação relacionada