我有一个包装mvn(Apache Maven)的bash脚本,为其输出添加颜色。它的缩减版本是:
mvn "$@" | sed -e "s/^\[INFO\] \-.*/$bldblu&$rst/g"
其中$bldblu
是粗体蓝色的ANSI颜色转义字符,$rst
重置颜色。
我遇到的问题是有时候mvn会写一行不以换行结束的行,因此(据我所知)sed一直在等待输入并且从不打印提示符(这使得它看起来像Maven挂了)。我已经尝试将-u
添加到sed中,但这只是强制sed进行逐行缓冲而不是缓冲多行 - 对我没有帮助。
到目前为止,这是我提出的:
mvn "$@" | perl -pe "$| = 1; s/^(\[INFO\] \-.*)/$bldblu\$1$rst/g"
但我认为-p
的使用在这里不正确。有什么帮助吗?
答案 0 :(得分:1)
替换可能过度,特别是当替换模式中包含特殊字符时。怎么样?
export bldblu
export rst
mvn "$@" | perl -pe 'if(/^.INFO. -/){ $_=$ENV{bldblu}.$_.$ENV{rst} }'
或者不是重新发明轮子
mvn "$@" | perl -MTerm::ANSIColor -pe
'$_=color("bold blue").$_.color("reset") if /^.INFO. -/'