>

Bash 스크립팅 (주로 CentOS에서)에서 너무 자주 색상을 사용했지만 사용법을 더 편하게하기 위해변수를 색상 값으로 재정의합니다.

local GRAY="\[\033[1;30m\]"
local LIGHT_GRAY="\[\033[0;37m\]"
local CYAN="\[\033[0;36m\]"
local LIGHT_CYAN="\[\033[1;36m\]"
local NO_COLOUR="\[\033[0m\]"

또는 tput 와 함께 :

bold=`tput bold`
normal=`tput sgr0`
whitef=`tput setaf 7`
greenf=`tput setaf 2`
redb=`tput setab 1`

나는 /etc/rc.d/init.d 주위에 grep'ed했습니다  디렉토리에 있지만 색상 정의와 관련된 것을 찾지 못했습니다.

이러한 정의가 이미 존재합니까? 그렇지 않으면 /etc/rc.d/init.d 의 파일에 넣을 것입니다.  예를 들어 /etc/rc.d/init.d/functions 와 약간 비슷하게 스크립트에 포함 시켰습니다.

  • 답변 # 1

    요청하는 내용에는 몇 가지 측면이 있습니다.

    먼저 배쉬는 색을 정의하지 않습니다. 실제로 bash는 색상이 존재한다는 것을 전혀 모릅니다. 그것은 당신이 문자 \033[0;36m 를 출력하도록 지시했다는 것입니다 . 터미널 에뮬레이터 (xterm, gnome-terminal 등)는 이러한 문자를 수신하고 "청록색으로 출력을 시작해야합니다"를 이해합니다.

    그러므로 색을 이해하는 것이 터미널 에뮬레이터입니다. 터미널 에뮬레이터는 \033[0;36m 를 이해합니다.  청록색이지만 다른 터미널 에뮬레이터는 청록색에 대해 완전히 다른 문자 집합을 사용할 수 있습니다 (단순한 터미널 에뮬레이터는 표준을 과소 평가하지 않습니다). 이것이 tput 의 이유입니다 . tput setaf 6 를 실행할 때 tput  는 색상 6 (청록색)에 대한 터미널의 이스케이프 코드를 찾아 해당 이스케이프 코드를 출력합니다. ( tput setaf 에 대한 자세한 내용은이 질문을 참조하십시오.  코드)

    이제 배쉬로 돌아 왔습니다. 아시다시피, 시안 색을 언급 할 때 \033[0;36m 를 사용하고 있습니다. \[\033[0;36m\] 가 아닌 . 대괄호가 없습니다. 대괄호의 목적은 프롬프트에서 이스케이프 코드 (색상)를 사용할 때 bash가 인쇄하지 않는 문자를 인식해야한다는 것입니다 (너비 0, 실제로 아무 것도 표시하지 않음). 따라서 비 인쇄 문자를 \[ 로 묶습니다.  와이즈 비즈 . 이러한 문자를 제거하면 처음에는 모든 것이 제대로 작동하는 것처럼 보이지만 명령이 터미널 너비를 초과하면 모든 종류의 기묘함이 발생하기 시작합니다. 입력 할 때 bash는 명령이 다음 줄로 줄 바꿈되어야하는시기를 알아야하기 때문입니다. 이렇게하려면 프롬프트의 너비와 입력 한 크기의 너비를 계산합니다.

    \] 에 대한 또 다른 메모 . 와이즈 비즈   tput 와 같은 것이아니요 . 방금 논의했듯이 대괄호는 bash 및 CYAN="\[\033[0;36m\]" 와 관련이 있습니다.  터미널 이스케이프 코드 만 출력합니다.

    대괄호는 일반적으로 프롬프트와 관련이 있기 때문에 스크립트 나 무언가의 출력에 색상을 사용하는 경우에는 사용하지 않아야합니다. 즉, 프롬프트 이상의 색상을 사용하려면 여러 변수를 정의해야합니다. 하나는 프롬프트에서 사용하기위한 대괄호가 있고 다른 하나는없는 것입니다. 프롬프트에서 색상을 참조 할 때마다 대괄호를 수동으로 추가 할 수는 있지만

    이야기 짧게 말하면 다음과 같이 정의하고 싶을 것입니다.

    CYAN="$(tput setaf 6)"
    
    
    tput

  • 이전 iptables - Postgres 데이터베이스 서버는 어떤 네트워크 프로토콜을 사용합니까?
  • 다음 bash - 파일 이름으로 파일 정렬