【问题标题】:Problem with Ant's AnsiColorLogger in Snow Leopard雪豹中 Ant 的 AnsiColorLogger 问题
【发布时间】:2011-11-25 21:10:23
【问题描述】:

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

另外,这是对 SuperUser 的一个更好的问题吗?

【问题讨论】:

    标签: macos ant osx-snow-leopard colors


    【解决方案1】:

    更新:我已经解决了这个问题。它与 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/(?&lt=\e\[)2;//g' # alias ant='/workspace/SDK/bin/ant-wrapper.sh' #蚂蚁发布 (输出有很多漂亮的颜色;好吧,也许不那么漂亮,更像是一个复活节彩蛋)

    原帖(及调试步骤):

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

    我的盒子:

    # unname -a Darwin Dave-Dopsons-MacBook-Pro.local 10.7.0 达尔文内核版本 10.7.0:2011 年 1 月 29 日星期六 15:17:16 PST;根: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”,我确实看到了转义序列,但仍然没有颜色:

    构建文件:/workspace/Words/words_blackberry/build.xml 电调[2;32m 发布:ESC[m

    仍然被阻止,如果有人让它在 OSX 上工作,希望得到建议

    知道了!

    这是彩色 ls 的输出:

    # CLICOLOR_FORCE=exfxcxdxbxegedabagacad ls -lGF |较少的 总计 112 -rw-r--r-- 1 ddopson 管理员 6511 5 月 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/

    注意转义序列的细微差别;他们没有'2;'就像 ANT 一样......

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 您的正则表达式存在过度匹配的风险。它将删除所有出现的“2;”来自输出流,这很容易合法地发生。例如“使用 value=2;foo=bar;z=a 构建 foo”
      • 对于我自己的使用,我更喜欢一个独特的可执行文件,因为我可以将它签入源代码管理并共享它。但如果不考虑这一点,bashrc 单行就可以很好地工作。
      • p.s.,对于不太熟悉的命令行功能:在这种情况下,“sed”和“perl -pe”基本上做同样的事情,运行一个正则表达式。如果你对 Perl 正则表达式很熟悉,它会更强大一些。但当然,每种语言都有自己丰富的功能集。我对 perl 相当了解,并且几乎不了解 sed,所以我的偏见很明显。然而,促使我更喜欢 perl 而不是 sed 的最大原因是 Mac OS X(基于 BSD)和 Linux 之间的命令行参数不一致。我发现使用 perl 制作可移植脚本更容易。 YMMV
      • @ddopson:啊,是的,关于 sed/perl 的有趣点。今天晚些时候我会尝试将 perl 放在那里而不是 sed 。风险很低,但真实存在。
      • @ddopson 也许您可以使用模式来匹配转义序列,例如sed 's/(\o33[)2;/\1/g' ;那只会匹配 ESCAPE[2;并将其替换为 ESCAPE[.但根据文档 (antinstaller.sourceforge.net/manual/manual/…) 应该有更简单的选项 - 只需使用“2;”创建自己的 defaults.properties 文件删除序列并使用 -Dant.logger.defaults= /path/to/your/file 选项
      猜你喜欢
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 2011-01-27
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多