2016-08-02 3 views
0

출력이 에서 출력되도록 색상 표시 방법을 찾고 있는데, 한 끝에서 yes의 모든 인스턴스가 한 색상으로 표시되고 no이 다른 색상으로 표시되도록합니다. 나는 체크 결과를 테스트하기 위해 AS_IF을 사용하여 반향 메시지를 생성 한 다음 일반적인 bash 컬러 명령을 사용하여 출력을 설정하는 방법이있을 것이라고 생각합니다. 이미 완료된 경우이 작업을 수행하는 데 시간을 낭비하지 않아도됩니다.구성 스크립트의 출력 색상 화

답변

1

당신에게 운이 좋은데, Autoconf는 기본적으로 하나의 커다란 C- 선행 처리기 남용이므로, 내부가 모두 노출되어 있고 공정한 경고가 하나의 Autoconf 버전에서 다음 버전으로 이어지지 않을 수있는 뭔가 해킹하기 쉽습니다.

AC_MSG_RESULT의 정의 (그 예 대부분의 인쇄/아니오 메시지) /usr/share/autoconf/autoconf/general.m4에서 발견되지 않으며, 매우 간단하게 로그 파일에 주어진 메시지를 인쇄 할뿐만 아니라 터미널로 정의된다

:

m4_define([AC_MSG_RESULT], 
[{ _AS_ECHO_LOG([result: $1]) 
_AS_ECHO([$1]); }dnl 
]) 

해당 매크로에서 호출 된 Autoconf 내부는 configure.ac에 노출되어 있으므로이를 호출하는 자신의 매크로로 AC_MSG_RESULT을 무시할 수 있습니다. 여기에 녹색으로 "예", 빨간색으로 "아니요"및 기타 모든 결과가 파란색으로 인쇄되어 인쇄되었습니다. configure.ac에서 다른 매크로 호출보다 먼저 포함 시키십시오 :

m4_pushdef([AC_MSG_RESULT], [ 
    { result=$1 
    _AS_ECHO_LOG([result: $result]) 
    AS_CASE(["x$result"], 
     [xyes*], _AS_ECHO([$(tput setaf 2)$result$(tput sgr0)]), 
     [xno*], _AS_ECHO([$(tput setaf 1)$result$(tput sgr0)]), 
     _AS_ECHO([$(tput setaf 4)$result$(tput sgr0)])); }dnl 
]) 

하지만 심각하게하지 마십시오.

+0

Autoconf의 차후 버전을 탑재하지 않았거나 다른 버전이있을 수 있기 때문에이 작업을 수행하지 않는 유일한 이유는 무엇입니까? – geoffjay

+0

또한 Autoconf의 이전 버전을 포함하지 않을 수도 있습니다. 따라서 유지 보수 모드에서 여러분과 다른 Autoconf 버전을 가진 패키지를 만들려는 사람은 모두 실패 할 수 있습니다. – ptomato

+0

그건 의미가 있습니다. 감사. – geoffjay

0

이것은 아마도 멍청한 질문입니다. 나는 패키지 검사를위한 하나 썼습니다 :

AC_DEFUN([COLOR_PKG_CHECK],[ 

    red=$(tput setaf 1) 
    grn=$(tput setaf 2) 
    clr=$(tput sgr0) 

    PKG_CHECK_EXISTS([$1],[$2],[found=yes],[found=no]) 

    AS_IF([test "x$found" = "xyes"],[ 
    msg="checking for $1... ${grn}yes${clr}" 
    AC_MSG_RESULT($msg) 
    $3 
    ],[ 
    msg="checking for $1... ${red}no${clr}" 
    AC_MSG_RESULT($msg) 
    $4 
    ]) 
]) 

이 작동을하지만 종류의이 작업을 수행 할 수있는 유일한 방법은 관심의 호출 같은 방법으로 포장 될 것이라고 지적했다. 나는 그것을하고 싶지 않다.