`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.