我目前正在Windows 7中运行此脚本。
所以,我有一个程序,用于对来自另一个命令(mkmk)的输出进行颜色编码,并计算出不同数量的错误和其他值得注意的统计数据等。所以现在,它以批处理文件的形式开始
/: error/ {
CntError++ ;
TraError[CntError] = $0;
colorf(cErrorDcb,$0) ;
next
}
function colorf(fg, str ) {
if ( Couleur < 1 )
{
printf("%s\n",str);
}
else
{
if ( System == "UNIX" )
{
printf("%s%s%s%s\n",fg,bg,str,NORMAL);
}
else
{
system("Colorize.exe /c:" fg " \"" str "\"");
printf("\n");
}
}
}
所以,一切正常,除了每次调用系统(“Colorize.exe”)(很多)之外,命令在终端输出并使输出变得混乱。它似乎不受我的批处理文件中的@echo off命令的影响,因为它在awk脚本中被调用。反正有没有隐藏这些系统命令,但保留我的其余awk输出?
答案 0 :(得分:1)
我不知道神奇的Windows咒语是什么来控制终端上显示的内容,但通常不是调用system()
而是让它调用的命令产生它自己的输出“#1}}混入使用awk输出,使用getline
读取调用的结果以填充变量,然后从awk打印出来。像这样:
/: error/ {
TraError[++CntError] = $0
print colorf(cErrorDcb,$0)
next
}
function colorf(fg, str, cmd, line, colorStr) {
if ( Couleur < 1 ) {
colorStr = str
}
else if ( System == "UNIX" ) {
colorStr = fg bg str NORMAL
}
else {
cmd = "Colorize.exe /c:" fg " \"" str "\""
colorStr = ( (cmd | getline line) > 0 ? line : str )
close(cmd)
}
return colorStr
}
我也摆脱了所有无用的冒号。
最佳建议 - 获取cygwin
!