首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EOL之前的流程流

EOL之前的流程流
EN

Stack Overflow用户
提问于 2011-11-23 11:14:00
回答 2查看 167关注 0票数 2

我有一个用于着色编译器(Maven)输出的小脚本,这样就不会再忽略错误了。

代码语言:javascript
复制
#!/bin/sh
export TEXT_YELLOW=`tput setaf 3`
export TEXT_RED=`tput setaf 1`
export RESET_FORMATTING=`tput sgr0`

mvn $* | sed \
-e "s/\(\[WARNING\].*\)/${TEXT_YELLOW}\1${RESET_FORMATTING}/g" \
-e "s/\(\[ERROR\].*\)/${TEXT_RED}\1${RESET_FORMATTING}/g"

问题是我的编译器拥有的shell特性(mvn cli:execute-phase)中的shell。在那里,像maven2>这样的命令提示符应该可以在屏幕上看到,然后用户就可以输入命令。不幸的是,由于我的脚本,我只看到一个闪烁的光标。只有当我按回车键时,maven2>提示前缀-文本才会弹出。

我的猜测是,sed在屏幕上打印东西之前正在等待EOL。要修复它,我必须查看流是否以字符串maven2>开头。如果不打印,则直接打印到终端,否则将其转发给sed。在巴什有可能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-30 09:42:51

好吧,我找到了解决办法。我尝试了很多事情,但最终还是不能完全用bash解决问题。所以我写了一个python脚本,它可以工作。只需将maven输出输送到脚本(如mvn cli:execute-phase | colorize.py )即可。还可以在bashrc中写入别名,以便所有maven调用都有彩色输出。

代码语言:javascript
复制
#!/usr/bin/python
# Same as regular mvn command but with colored output.

import sys, subprocess, os, time

def colorize( line ):
    red = '\033[1;31m'
    yellow = '\033[1;33m'
    endcolor = '\033[1;m'

    if ("[ERROR]" in line) or ("ERROR" in line ) or ( "Failures" in line ) or ( "Errors" in line ):        
        print red + line + endcolor,    
    elif ("[WARNING]" in line) or ( "WARN" in line ):
        print yellow + line + endcolor,
    else:
        print line,


line=""
printPrompt = True
while True:

    c = sys.stdin.read(1)

    if not c:
        # eof
        break

    line = line + c

    if printPrompt:
        if line.startswith("maven2>"):        
            print "maven2>",
            sys.stdout.flush()
            printPrompt = False
    else:
        # rewrite the current line to console
        sys.stdout.write('\r')
        print line,
        sys.stdout.flush()

    if c.endswith("\n"):
        colorize(line)
        line = ""
        printPrompt = True
票数 1
EN

Stack Overflow用户

发布于 2012-06-11 16:49:11

@mainbrain --除了"mvn原型:generate“提示符"Define for property‘groupId”::“”之外,您的pythons脚本工作得很好。

示例

代码语言:javascript
复制
mvn archetype:generate \
   -DarchetypeRepository=repo1.maven.org \
   -DarchetypeGroupId=org.codehaus.mojo \
   -DarchetypeArtifactId=gwt-maven-plugin \
   -DarchetypeVersion=2.4.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8241222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档