我有一个产生大量输出的进程(Apache maven),我想要为某些部分着色。具体来说,如果该行以[INFO]
开头,我希望该初始子字符串为蓝色,所有其他文本保持不变。
这是我的脚本简化版color-maven
:
#!/bin/zsh
export BLUE=`tput setaf 4`
export RESET=`tput sgr0`
function mvn-color() {
( mvn $@ | awk "BEGIN { RS = \" \" } ; { sub(/\[INFO\]/, \"${BLUE}[INFO]${RESET}\"); printf \"\%s \", \$0 }" )
}
mvn-color archetype:generate
示例输出(所有初始[INFO]
在外壳中以蓝色显示),其中<enter>
标记程序要求输入的位置:
$ ./color-maven
[INFO] Scanning for projects...
[...cut...]
1192: remote -> uk.ac.rdg.resc:edal-ncwms-based-webapp (-)
<enter>
Choose a number or apply filter: 497: Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.1
在上文中,文本Choose a number or apply filter: 497:
是某些用户输入的提示。将其与mvn
命令的正常执行进行比较,而不使用我的脚本:
$ mvn archetype:generate
[INFO] Scanning for projects...
[...cut...]
1192: remote -> uk.ac.rdg.resc:edal-ncwms-based-webapp (-)
Choose a number or apply filter: 497: <enter>
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.1
如果我使用mvn
脚本处理awk
的输出,为什么提示不会立即显示在屏幕上?如何保留原始mvn
命令的相同输出结构并仅修改所有行的初始[INFO]
字符串?