`nawk` „funktioniert nicht“ mit `make`? Warum?

`nawk` „funktioniert nicht“ mit `make`? Warum?

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

Ich verwende ähnliche Aliase zum Einfärben anderer Ausgaben (mit weiteren Mustern, aber dies ist nur ein Beispiel).

Dieser Alias ​​funktioniert also, wenn ich ihn wie folgt verwende:

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

das echoist rot gedruckt.ABER, wenn ich versuche:

$ make | mca_color

und selbst

$ make 2>&1 | mca_color

Das Ergebnis istnichtfarbig (und ja, makees „druckt“ am Ende der Ausführung den gleichen Text).

Irgendwelche Ideen?


Ich dachte, es könnte etwas mit untergeordneten Prozessen oder so sein, aber offensichtlich funktioniert die Pipe – habe es mit versucht grep, versucht, die Ausgabe in eine Datei umzuleiten, alles funktioniert.

Auch das funktioniert nicht (der Text wird gedruckt, aber nicht eingefärbt):

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

Antwort1

Ich habe es schließlich fast zufällig herausgefunden.

alias make='colormake'Es stellte sich heraus, dass es noch ein weiteres Skript gab colormake, das Folgendes enthielt:

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

das erklärt einiges. Durch das Entfernen des „ aliasfor colormake“ wurde das „Problem“ behoben.

verwandte Informationen