抑制从awk脚本调用的系统命令
Suppressing system command called from awk script
我目前 运行 这个脚本在 Windows 7.
所以,我有一个程序,用于对另一个命令 (mkmk) 的输出进行颜色编码,并计算不同数量的错误和其他值得注意的统计数据等。所以现在,它以批处理文件的形式开始,它
- 关闭回显
- 将一些颜色值设置为变量
- 同时调用 mkmk 命令和 awk 脚本
然后 awk 脚本逐行解析,并调用一个函数,然后调用一个执行着色的 exe。工作原理如下:
/: error/ {
CntError++ ;
TraError[CntError] = [=10=];
colorf(cErrorDcb,[=10=]) ;
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");
}
}
}
所以,一切正常,除了每次调用 system("Colorize.exe") 时(很多),命令在终端中输出并使输出混乱。它似乎不受我的批处理文件中的 @echo off 命令的影响,因为它是在 awk 脚本中调用的。有没有办法只隐藏这些系统命令,但保留我的 awk 输出的其余部分?
我不知道神奇的 Windows 咒语是什么来控制终端上显示的内容,但通常不是调用 system()
并让它调用的命令产生它自己的混合输出在 awk 输出中,使用 getline
读取调用结果以填充变量,然后从 awk 打印该结果。像这样:
/: error/ {
TraError[++CntError] = [=10=]
print colorf(cErrorDcb,[=10=])
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
!
我目前 运行 这个脚本在 Windows 7.
所以,我有一个程序,用于对另一个命令 (mkmk) 的输出进行颜色编码,并计算不同数量的错误和其他值得注意的统计数据等。所以现在,它以批处理文件的形式开始,它
- 关闭回显
- 将一些颜色值设置为变量
- 同时调用 mkmk 命令和 awk 脚本
然后 awk 脚本逐行解析,并调用一个函数,然后调用一个执行着色的 exe。工作原理如下:
/: error/ {
CntError++ ;
TraError[CntError] = [=10=];
colorf(cErrorDcb,[=10=]) ;
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");
}
}
}
所以,一切正常,除了每次调用 system("Colorize.exe") 时(很多),命令在终端中输出并使输出混乱。它似乎不受我的批处理文件中的 @echo off 命令的影响,因为它是在 awk 脚本中调用的。有没有办法只隐藏这些系统命令,但保留我的 awk 输出的其余部分?
我不知道神奇的 Windows 咒语是什么来控制终端上显示的内容,但通常不是调用 system()
并让它调用的命令产生它自己的混合输出在 awk 输出中,使用 getline
读取调用结果以填充变量,然后从 awk 打印该结果。像这样:
/: error/ {
TraError[++CntError] = [=10=]
print colorf(cErrorDcb,[=10=])
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
!