표준 오류를 빨간색으로 인쇄하는 방법 표준 오류를

동일한 색상의 표준 출력을 사용하는 대신 표준 오류를 콘솔에 빨간색으로 인쇄하려면 어떻게해야합니까?

그것은 사용 가능 그놈 터미널을 ?



답변

나는 stderred를 사용 하고 좋은 해결책을 찾았습니다. 그와 같은 추가 정보 참고 :

터미널로가는 모든 stderr 출력을 채색하여 stdout과 구별 할 수 있도록 libc에서 write () 및 스트림 함수 계열 (fwrite, fprintf, error …)에 stderred hooks. 기본적으로 텍스트를 빨간색으로 만드는 적절한 ANSI 이스케이프 코드를 사용하여 설명자 “2”로 파일로 이동하는 텍스트를 래핑합니다.

공유 라이브러리로 구현되며 동적 링커의 사전로드 / 삽입 기능 덕분에 기존 바이너리를 다시 컴파일 할 필요가 없습니다.

Linux (LD_PRELOAD), FreeBSD (LD_PRELOAD) 및 OSX (DYLD_INSERT_LIBRARIES)에서 지원됩니다.

컴파일하는 것은 간단하지만 Github 사이트 의 지침에 따라 소스에서 빌드해야합니다 .

sudo apt-get install build-essential git cmake

그때

git clone git://github.com/sickill/stderred.git
cd stderred

그때

make

그것의 가장 중요한 부분은 당신의 .bashrc; libstderred.so빌드 디렉토리 의 파일에 링크해야합니다 . 빌드 디렉토리가있는 절대 경로를 사용해야합니다 (/ home / mike / src / stderred / build). 나는 내 다음을 추가합니다 .bashrc:

export LD_PRELOAD="/home/mike/src/stderred/build/libstderred.so${LD_PRELOAD:+:$LD_PRELOAD}"

분명히 더 이상 사용하지 않으려면 위의 줄을 제거 .bashrc하고 터미널을 다시 시작하십시오.

존재하지 않는 파일에서 테스트 한 결과 ( 다른 환경이 설정되어 있으면 sudo사용자 .bashrc가 읽지 않으므로 사용시 분명히 작동 하지 않음) :

(그런데 그것은 하지 않습니다 내 공작을 설정 @ 뉴켐 프롬프트 빨간색 즉 빨간색되면서 이미 )


답변

일반적으로 그렇습니다. Gnome Terminal은 ANSI 터미널이므로 표준 ANSI 이스케이프 코드를 지원합니다.

다음은 예입니다. 터미널에 이것을 입력하십시오 :

echo -e "\e[01;31mREDRUM\e[0m"

-e옵션을 사용하면 백 슬래시 코드를 해석 할 수 있으므로 \e“Esc”(16 진 코드 0x1B)가됩니다. 또는 직접 이스케이프를 입력하려면 ctrl-V Esc다음을 누르십시오 .

echo  "^[[01;31mREDRUM^[[0m"

이스케이프와 [둘 다 터미널에서 인식하는 코드를 구성합니다. 이 순서 후에는 콜론 ( ;)으로 구분 된 속성 목록 을 삽입해야합니다 m. 모든 코드는 여기 를 참조 하십시오 . 예제에는 속성 0(위에서 알 수 있듯이 모든 속성을 재설정합니다.이 예제를 종료하는 시퀀스 임)과 스타일 (밑줄, 밝음, 굵게 등) 및 몇 가지 색상 속성이 있습니다.

위의 답변은 자신의 프로그램을 작성할 때 색상을 사용하는 방법을 알려줍니다.

그러나 귀하의 질문을 올바르게 이해하면 실행중인 모든 프로그램의 stderr 및 stdout을 시각적으로 분리하고 싶습니다. 필터를 통해 출력을 구문 분석하지 않으면 간단하지 않습니다. 방법은 다음과 같습니다 ( 여기 참조 ).

  1. 함수를 정의하십시오 (.bashrc 파일에 넣을 수 있음).

    color() { "$@" 2>&1>&3|sed 's,.*,\x1B[31m&\x1B[0m,'>&2; } 3>&1
    
  2. 다음과 같은 프로그램을 시작하십시오 :

    color program
    

프로그램의 stderr는 빨간색으로 표시됩니다.