`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、「問題」は修正されました。

関連情報