2009-11-24 3 views
4

AnsiColorLogger를 사용하도록 Ant를 구성했습니다. Mac OS 10.5에서는 모든 것이 잘되었습니다. Snow Leopard로 업그레이드 한 이후 AnsiColorLogger는 더 이상 작동하지 않습니다. 앤트 출력 (uncolorized)이 잠시 사라진 것을 볼 수 있습니다. Snow Leopard에서 다른 사람이이 작업을하고 있습니까? 다른 ANSI 색상은 Terminal.app에서 정상적으로 작동합니다 (색상은 ls 출력, 색상은 프롬프트).Snow Leopard의 Ant의 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과 관련하여 유사한 문제에 봉착

이야기의 교훈은이 래퍼 스크립트가 색상 화 출력을 달성하는 것입니다 색상을 전혀 표시하지 않습니다. 나는 저자가 의미하는 바가 무엇인지 모르겠다. "[출력은] 두 번째로 사라진다." 터미널에서 이상한 문제가 발생하는 것 같습니다.

 
# 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.1045680.n5.nabble.com/Macosx-and-AnsiColorLogger-td1355310.html

: 여기 http://ant.apache.org/manual/listeners.html#AnsiColorLogger

가 관련 포럼 게시물의 (아무 소용이 주어진 조언을 시도) 내 상자

나는 "개미 | 덜"을했는데 이스케이프 시퀀스를 볼 수 있지만 여전히 색상이 없습니다 :

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

에서 작동을받은 IT를 가지고있는 경우

아직도이 차단하고, 조언을 사랑! 그래서 여기

은 색상 화 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처럼 ...

그래서이 이론을 테스트하려면 : 개미 - 로거 org.apache.tools.ant.listener.AnsiColorLogger | sed 's/2; // g'

... 출력이 COLORIZED! 승리!

+0

AWESOME! 훌륭합니다. – Nate

+0

+1 :하지만 ant-wrapper.sh 파일없이 수행 할 수있는 방법을 찾았습니다. –

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;"를 모두 제거합니다. 출력 스트림에서 상당히 쉽게 합법적으로 발생할 수 있습니다. 예 : "value = 2; foo = bar; z = a"로 건물 foo 빌드 –

+0

내 자신의 용도로는 소스 제어로 체크하고 공유 할 수 있으므로 고유 한 실행 파일을 선호합니다. 그러나 그것이 고려 사항이 아닌 곳에서는 bashrc 한 줄이 잘 작동 할 것입니다. –

+0

p.s., 그다지 친숙하지 않은 명령 행에 대해서는 : "sed"와 "perl -pe"는 기본적으로 똑같은 일을합니다. 펄 정규식은 당신이 그것을 잘 알고 있다면 좀 더 강력합니다. 물론 각 언어마다 풍부한 기능 세트가 있습니다. 나는 펄을 합리적으로 잘 알고, 간신히 말하면서 나의 편견은 분명하다. 그러나 sed보다 펄을 더 선호하게 된 가장 큰 이유는 Mac OS X (BSD 기반)와 Linux 사이의 명령 행 인수가 일치하지 않기 때문입니다. perl로 이식 가능한 스크립트를 만드는 것이 더 쉬웠다. YMMV –

관련 문제