`nawk`“与`make`不起作用?为什么?


1

我有以下别名:

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

你有没有在字节级比较两个输出?
— Marcus Rickert

您建议的所有版本都适用于我,即文本以红色打印。
— Marcus Rickert

@MarcusRickert - 在字节级别 - 不,我该怎么做?甚至是 make 作品?有意思,我不知道为什么它在这里不起作用.....
— Kiril Kirov

通过 字节级别 我的意思是你试着看看里面的内容 十六进制模式 。一些编辑支持这一点。这样您就可以找到可能破坏模式搜索的不可见字符。作为第一个测试,您还可以比较输出管道的文件的文件长度,并查看长度是否有任何差异。
— Marcus Rickert

@MarcusRickert - 我明白了。你可以看到我的答案。愚蠢的情况..
— Kiril Kirov

Answers:


0

我终于意外地想出来了。

看来,还有另一个 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 对于 colormake 修正了“问题”。


不知道为什么 colormake 没有产生任何颜色,但我并不在乎。
— Kiril Kirov
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.