У меня есть следующий псевдоним:
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
что многое объясняет. Удаление alias
for colormake
исправило "проблему".