Macos Ant'的问题;《雪豹》中的AnsiColorLogger

Macos Ant'的问题;《雪豹》中的AnsiColorLogger,macos,ant,osx-snow-leopard,colors,Macos,Ant,Osx Snow Leopard,Colors,我已将Ant配置为使用AnsiColorLogger。在MacOS10.5中,一切都很好。自从升级到雪豹后,AnsiColorLoggger不再工作。我看到蚂蚁输出(未着色)一秒钟,然后它就消失了。还有人在《雪豹》里用过这个吗?其他ANSI颜色在Terminal.app中工作正常(彩色ls输出,我的提示符中的颜色) 另外,这是一个关于超级用户的更好的问题吗?更新:我已经解决了这个问题。这与ANT给出的转义序列有关,这些转义序列虽然适用于linux xterm,但Mac OS X无法正确解释。可以

我已将Ant配置为使用AnsiColorLogger。在MacOS10.5中,一切都很好。自从升级到雪豹后,AnsiColorLoggger不再工作。我看到蚂蚁输出(未着色)一秒钟,然后它就消失了。还有人在《雪豹》里用过这个吗?其他ANSI颜色在Terminal.app中工作正常(彩色ls输出,我的提示符中的颜色)


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

更新:我已经解决了这个问题。这与ANT给出的转义序列有关,这些转义序列虽然适用于linux xterm,但Mac OS X无法正确解释。可以过滤ANT输出以转换这些序列并恢复彩色输出

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

# cat /workspace/SDK/bin/ant-wrapper.sh /usr/bin/ant -logger org.apache.tools.ant.listener.AnsiColorLogger "$@" | 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) #cat/workspace/SDK/bin/ant-wrapper.sh /usr/bin/ant-logger org.apache.tools.ant.listener.AnsiColorLogger“$@”perl-pe的/(?<=\e\[)2;//g” #别名ant='/workspace/SDK/bin/ant wrapper.sh' #蚂蚁出版 (输出有很多漂亮的颜色;嗯,可能不太漂亮,更像复活节彩蛋) 原始Post(和调试步骤):

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

我的盒子:

# 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 #联阿援助团 Darwin Dave-Dopson-MacBook-Pro.local 10.7.0达尔文内核版本10.7.0:Sat Jan 29 15:17:16 PST 2011;root:xnu-1504.9.37~1/release386i386 这是我们正在使用的ANT记录器:

这里有一个相关的论坛帖子(尝试了给出的建议,但没有结果):

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

Buildfile: /workspace/Words/words_blackberry/build.xml ESC[2;32m publish:ESC[m Buildfile:/workspace/Words/Words\u blackberry/build.xml ESC[2;32米 发布: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[m@ -> ../artwork/output/blackberry/files/ lrwxr-xr-x 1 ddopson admin 36 May 23 21:20 ESC[35mimagesESC[mESC[m@ -> ../artwork/output/blackberry/images/ #CLICOOR|U FORCE=exfxcxdxbxegedabagacad ls-lGF |小于 总数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管理员35 May 23 21:24 ESC[35mfilesESC[mESC[m@>../artwork/output/blackberry/files/ lrwxr-xr-x 1 ddopson管理员36 May 23 21:20 ESC[35mimagesc[mESC[m@>../artwork/output/blackberry/images/ 注意转义序列有多么微妙的不同;它们不像ANT那样有“2;”

为了验证这个理论: ant-logger org.apache.tools.ant.listener.AnsiColorLogger发布| sed's/2;//g'


…而且输出是彩色的!胜利!

我把ddopson的知识塞进了一行:

ant () { command ant  -logger org.apache.tools.ant.listener.AnsiColorLogger "$@" | sed 's/2;//g' ; }

这是通过使用一个。将它放在你的
~/.profile
文件中,它将执行与ddopson的
ant wrapper.sh
相同的操作,但不需要第二个文件来工作。稍微优雅一些,不那么脆弱。

你的正则表达式有过度匹配的风险。它将删除所有出现的“2”从输出流,这很容易合法地发生。例如“使用value=2构建foo;foo=bar;z=a”对于我自己的使用,我更喜欢一个独特的可执行文件,因为我可以将它签入源代码管理并共享它。但如果不考虑这一点,对于不太熟悉的命令行fu来说,bashrc one-liner会非常好用做基本相同的事情,运行一个正则表达式。Perl正则表达式如果你熟悉的话会更强大一些。但当然,每种语言都有自己丰富的功能集。我对Perl相当了解,对sed几乎一无所知,所以我的偏见是很清楚的。然而,促使我更喜欢Perl而不是sed的一个重要原因是它们之间的命令行参数不一致MacOSX(基于BSD)和Linux。我发现用perl编写可移植脚本更容易。YMMV@ddopson:啊,是的,关于sed/perl有一个有趣的观点。今天晚些时候我会尝试将perl放在那里,而不是sed。风险很低,但确实存在。@ddopson也许您可以使用模式来匹配转义序列,例如sed的/(\o33[)2、 /\1/g';这将只匹配ESCAPE[2;并将其替换为ESCAPE[。但是根据文档()应该有更简单的选项-只需创建自己的defaults.properties文件并删除带有“2”的序列,然后使用-Dant.logger.defaults=/path/to/your/file选项