`nawk` "не работает" с `make`? Почему?

`nawk` "не работает" с `make`? Почему?

У меня есть следующий псевдоним:

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; }'"'"

Я использую похожие псевдонимы для раскрашивания других выходных данных (используя больше шаблонов, но это всего лишь пример).

Итак, этот псевдоним работает, если я использую его следующим образом:

$ echo "-ne Creating shared object test.so ..." | mca_color

напечатано echoкрасным цветом.НО, когда я пытаюсь:

$ make | mca_color

и даже

$ make 2>&1 | mca_color

результат естьнетцветной (и да, make«печатает» тот же текст в конце, если его выполнить).

Есть идеи?


Я думал, что что-то с дочерними процессами или еще чем-то, но, очевидно, конвейер работает — попробовал с grep, попробовал перенаправить вывод в файл, все работает.

Даже это не работает (текст печатается, но не раскрашивается):

$ make 2>&1 | grep 'a' | mca_color

решение1

Наконец-то я это понял, почти случайно.

Оказалось, что был еще один alias make='colormake'и colormakeэто скрипт, содержащий:

/usr/bin/make "$@" 2>&1 | /usr/share/colormake/colormake.pl/usr/bin/make "$@" 2>&1 | /usr/share/colormake/colormake.pl

что многое объясняет. Удаление aliasfor colormakeисправило "проблему".

Связанный контент