동일한 색상의 표준 출력을 사용하는 대신 표준 오류를 콘솔에 빨간색으로 인쇄하려면 어떻게해야합니까?
그것은 사용 가능 그놈 터미널을 ?
답변
나는 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을 시각적으로 분리하고 싶습니다. 필터를 통해 출력을 구문 분석하지 않으면 간단하지 않습니다. 방법은 다음과 같습니다 ( 여기 참조 ).
-
함수를 정의하십시오 (.bashrc 파일에 넣을 수 있음).
color() { "$@" 2>&1>&3|sed 's,.*,\x1B[31m&\x1B[0m,'>&2; } 3>&1
-
다음과 같은 프로그램을 시작하십시오 :
color program
프로그램의 stderr는 빨간색으로 표시됩니다.