2009-11-24 108 views
4

我已将Ant配置为使用AnsiColorLogger。在Mac OS 10.5中,一切都很好。自升级到Snow Leopard后,AnsiColorLoggger不再有效。我看到Ant输出(无色)一秒钟,然后它就消失了。有没有其他人在雪豹工作?其他ANSI颜色在Terminal.app中正常工作(彩色ls输出,提示中的颜色)。蚂蚁的AnsiColorLogger在雪豹问题

另外,这是超级用户的更好的问题吗?

回答

6

更新:我已经整理出了这个问题。它与ANT给出的转义序列适用于linux xterm,但不能被Mac OS X正确解释。可以过滤ANT输出以转换这些序列并恢复彩色输出。

这个故事的寓意是,这种包装脚本将实现彩色输出:

 
# cat /workspace/SDK/bin/ant-wrapper.sh 
/usr/bin/ant -logger org.apache.tools.ant.listener.AnsiColorLogger "[email protected]" | perl -pe 's/(?<=\e\[)2;//g' 

# alias ant='/workspace/SDK/bin/ant-wrapper.sh' 

# ant publish 
(output has lots of pretty colors; well, maybe not so pretty, more like an easter egg) 

原始帖子(和调试步骤):

我有关于AnsiColorLogger类似问题根本不显示颜色。我不确定作者的意思是“[output出现]一秒钟,那么它就会消失”。这在终端上似乎是一个奇怪的问题。

我的盒子:

 
# uname -a 
Darwin Dave-Dopsons-MacBook-Pro.local 10.7.0 Darwin Kernel Version 10.7.0: Sat Jan 29 15:17:16 PST 2011; root:xnu-1504.9.37~1/RELEASE_I386 i386 

这是ANT记录仪,我们使用: http://ant.apache.org/manual/listeners.html#AnsiColorLogger

这里有一个相关的论坛帖子(试图给出的建议,但没有成功):http://ant.1045680.n5.nabble.com/Macosx-and-AnsiColorLogger-td1355310.html

我做了“ant | less”,并且我看到了转义序列,但仍然没有颜色:

 
Buildfile: /workspace/Words/words_blackberry/build.xml 
ESC[2;32m 
publish:ESC[m 

仍然受阻于这一点,将你的爱情忠告如果有人得到它在OSX

工作得到它!

所以这里的彩色ls的输出结果:

 
# CLICOLOR_FORCE=exfxcxdxbxegedabagacad ls -lGF | less 
total 112 
-rw-r--r-- 1 ddopson admin 6511 May 29 12:41 build.xml 
drwxr-xr-x 6 ddopson admin 204 May 28 23:59 ESC[34meclipse-binESC[mESC[m/ 
lrwxr-xr-x 1 ddopson admin 35 May 23 21:24 ESC[35mfilesESC[mESC[[email protected] -> ../artwork/output/blackberry/files/ 
lrwxr-xr-x 1 ddopson admin 36 May 23 21:20 ESC[35mimagesESC[mESC[[email protected] -> ../artwork/output/blackberry/images/ 

通知转义序列是如何微妙的不同;他们没有'2'像蚂蚁做...

所以要测试这个理论: ant -logger org.apache.tools.ant.listener.AnsiColorLogger发布| sed's/2; // g'

...并且输出是彩色的!胜利!

+0

真棒!这很好。 – Nate 2011-05-30 02:08:18

+0

+1:但我已经找到了一种不使用ant-wrapper.sh文件的方法... – 2011-11-25 13:10:54

3

我已经拿ddopson的知识和挤它转化为一个单行:

ant() { command ant -logger org.apache.tools.ant.listener.AnsiColorLogger "[email protected]" | sed 's/2;//g' ; } 

这是通过使用Bash Function。把它放在你的~/.profile文件里,它会做和ddopson的ant-wrapper.sh一样的功能,但不需要第二个文件就可以工作。稍微更优雅,更脆弱。

+0

您的正则表达式存在过度匹配的风险。它将删除所有出现的“2”。从输出流,这可能很容易合法地发生。例如“构建foo值= 2; foo = bar; z = a” – 2011-12-01 18:19:33

+0

对于我自己的用途,我更喜欢独特的可执行文件,因为我可以将其检入源代码管理并共享。但是,如果这不是一个考虑因素,那么一个bashrc单行就可以很好地工作。 – 2011-12-01 18:22:45

+0

p.s.对于不太熟悉的命令行fu:在这种情况下,“sed”和“perl -pe”基本上是一样的,运行正则表达式。如果你知道的话,Perl正则表达式会更强大一些。但是,当然,每种语言都有其丰富的功能集。我很熟悉perl,sed几乎没有,所以我的偏见很明显。然而,推动我更喜欢perl over sed的重要原因是Mac OS X(基于BSD)和Linux之间的命令行参数不一致。我发现用perl制作可移植脚本更容易。 YMMV – 2011-12-01 18:31:04