Bash 쉘에서 색상 얻기

Bash 쉘에서 색상 얻기

나는 이것을 가지고있다:

ql_gray='\033[1;30m'
ql_magenta='\033[1;35m'
ql_cyan='\033[1;36m'
ql_orange='\033[1;33m'
ql_green='\033[1;32m'
ql_no_color='\033[0m'

나는 다음과 같이 사용합니다 :

echo "${ql_magenta}quicklock: could not acquire lock with name '${qln}'${ql_no_color}."

하지만 나는 그것을 이해합니다:

\033[1;35mquicklock: could not acquire lock with name '/Users/me/.quicklock/locks/_oresoftware.lock'\033[0m.

제어 문자를 인식하려면 일부 플래그를 설정해야 합니까?

최종 사용자가 제어 문자를 인식할 수 있는지 확인할 수 있는 플래그가 있습니까? 인식되지 않으면 위의 설정을 다음과 같이 설정할 수 있습니다.

ql_gray=''
ql_magenta=''
ql_cyan=''
ql_orange=''
ql_green=''
ql_no_color=''

Bash 버전 3 이상을 지원해야 합니다.

답변1

이를 수행하는 휴대용 방법은 다음을 사용하는 것입니다.tput:

ql_gray=$(tput setaf 7)
ql_magenta=$(tput setaf 5)
ql_cyan=$(tput setaf 6)
ql_orange=$(tput setaf 3)
ql_green=$(tput setaf 2)
ql_no_color=$(tput sgr0)

이는 현재 터미널 설정을 고려합니다. 공식 색상 목록은 다음 위치에 문서화되어 있습니다.terminfo(5)맨페이지그러나 실험이 필요할 수 있습니다. 예를 들어 위 목록에서 7은 공식적으로 흰색(그러나 대부분의 터미널에서는 밝은 회색으로 끝남), 3은 공식적으로 노란색(그러나 대부분의 터미널에서는 진한 노란색 또는 주황색으로 나타남)입니다. TERM=dumb색상을 호출하기 전에 설정하여 색상을 비활성화 할 수 있습니다 tput.

답변2

bash가 문자열의 이스케이프 시퀀스를 해석하도록 해야 합니다. 다음 방법 중 하나를 사용할 수 있습니다.

echo -e "${ql_gray}..."
printf "%b\n" "${ql_gray}..."

또는 변수를 설정할 때 변수를 평가합니다.

ql_gray=$'\033[1;30m'

그 다음에:

echo "${ql_gray}..."
printf "%s\n" "${ql_gray}..."

답변3

이 플래그를 사용하면 사용하는 대신 제어 문자를 인식합니다 echo.echo -e

printf작동할 수도 있습니다. 분명히 POSIX입니다.

관련 정보