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 echo
ist rot gedruckt.ABER, wenn ich versuche:
$ make | mca_color
und selbst
$ make 2>&1 | mca_color
Das Ergebnis istnichtfarbig (und ja, make
es „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 „ alias
for colormake
“ wurde das „Problem“ behoben.