Linux에서 반향의 출력 색상을 변경하는 방법


1737

echo 명령을 사용하여 터미널에 텍스트를 인쇄하려고합니다.

텍스트를 붉은 색으로 인쇄하고 싶습니다. 어떻게해야합니까?


30
이 링크는 매우 유용합니다 : misc.flogisoft.com/bash/tip_colors_and_formatting
Pithikos

이것에 대해 살펴보십시오. 내 질문에 대답했습니다 : stackoverflow.com/a/48216286/3782119
Shayan Amani

답변:


2293

다음 ANSI 이스케이프 코드를 사용할 수 있습니다 .

Black        0;30     Dark Gray     1;30
Red          0;31     Light Red     1;31
Green        0;32     Light Green   1;32
Brown/Orange 0;33     Yellow        1;33
Blue         0;34     Light Blue    1;34
Purple       0;35     Light Purple  1;35
Cyan         0;36     Light Cyan    1;36
Light Gray   0;37     White         1;37

그런 다음 스크립트에서 다음과 같이 사용하십시오.

#    .---------- constant part!
#    vvvv vvvv-- the code from above
RED='\033[0;31m'
NC='\033[0m' # No Color
printf "I ${RED}love${NC} Stack Overflow\n"

love빨간색으로 인쇄 됩니다.

@ james-lim의 의견 에서 echo명령을 사용하는 경우 -e 플래그를 사용하여 백 슬래시 이스케이프를 허용하십시오 .

# Continued from above example
echo -e "I ${RED}love${NC} Stack Overflow"

( "\n"빈 줄을 추가하지 않으려면 echo를 사용할 때 추가하지 마십시오 )


11
나를 위해 작동하지 않습니다-출력 :\e[0;31mHello Stackoverflow\e[0m
Ben Harold

171
"-e"로 시도 했습니까? 그것은 알 수 echo백 슬래시 탈출을 가능하게 할 수 있습니다.
James Lim

142
MacOSX에서 \x1B대신 사용 \e. \033모든 플랫폼에 적합합니다.
Xiao

4
개미 속성 파일에서 esacpe에 대한 유니 코드를 사용하십시오 (예 : red = \ u001b [0; 31m
shonky linux user

20
tsan을 위해 만든 msanford처럼, 여기에 "ANSI-Rainbow"가 있습니다for (( i = 30; i < 38; i++ )); do echo -e "\033[0;"$i"m Normal: (0;$i); \033[1;"$i"m Light: (1;$i)"; done
모두

970

굉장한 tput명령 ( Ignacio의 답변 에서 제안 됨 )을 사용하여 모든 종류의 것들에 대한 터미널 제어 코드를 생성 할 수 있습니다.


용법

특정 tput하위 명령에 대해서는 나중에 설명합니다.

곧장

tput일련의 명령의 일부로 호출하십시오 .

tput setaf 1; echo "this is red text"

텍스트가 여전히 오류로 표시 되면 ;대신 사용하십시오 .&&tput

쉘 변수

또 다른 옵션은 쉘 변수를 사용하는 것입니다.

red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
echo "${red}red text ${green}green text${reset}"

tput터미널에서 특별한 의미를 갖는 것으로 해석되는 문자 시퀀스를 생성합니다. 그들은 스스로 보여지지 않을 것입니다. 터미널 이외의 프로그램에서 파일로 저장하거나 입력으로 처리 할 수 ​​있습니다.

명령 대체

명령 대체를 사용하여 tput의 출력을 echo문자열에 직접 삽입하는 것이 더 편리 할 수 ​​있습니다 .

echo "$(tput setaf 1)Red text $(tput setab 7)and white background$(tput sgr 0)"

위 명령은 우분투에서 이것을 생성합니다.

컬러 터미널 텍스트의 스크린 샷


전경색 및 배경색 명령

tput setab [1-7] # Set the background colour using ANSI escape
tput setaf [1-7] # Set the foreground colour using ANSI escape

색상은 다음과 같습니다.

Num  Colour    #define         R G B

0    black     COLOR_BLACK     0,0,0
1    red       COLOR_RED       1,0,0
2    green     COLOR_GREEN     0,1,0
3    yellow    COLOR_YELLOW    1,1,0
4    blue      COLOR_BLUE      0,0,1
5    magenta   COLOR_MAGENTA   1,0,1
6    cyan      COLOR_CYAN      0,1,1
7    white     COLOR_WHITE     1,1,1

여기에 나와 있지 않은 다른 숫자를 사용하는 비 ANSI 버전의 색상 설정 기능 ( setb대신 setabsetf대신 setaf)이 있습니다.

텍스트 모드 명령

tput bold    # Select bold mode
tput dim     # Select dim (half-bright) mode
tput smul    # Enable underline mode
tput rmul    # Disable underline mode
tput rev     # Turn on reverse video mode
tput smso    # Enter standout (bold) mode
tput rmso    # Exit standout mode

커서 이동 명령

tput cup Y X # Move cursor to screen postion X,Y (top left is 0,0)
tput cuf N   # Move N characters forward (right)
tput cub N   # Move N characters back (left)
tput cuu N   # Move N lines up
tput ll      # Move to last line, first column (if no cup)
tput sc      # Save the cursor position
tput rc      # Restore the cursor position
tput lines   # Output the number of lines of the terminal
tput cols    # Output the number of columns of the terminal

명령 지우기 및 삽입

tput ech N   # Erase N characters
tput clear   # Clear screen and move the cursor to 0,0
tput el 1    # Clear to beginning of line
tput el      # Clear to end of line
tput ed      # Clear to end of screen
tput ich N   # Insert N characters (moves rest of line forward!)
tput il N    # Insert N lines

다른 명령들

tput sgr0    # Reset text format to the terminal's default
tput bel     # Play a bell

컴 피즈 흔들 거리는 창문bel명령은 사용자의 관심을 끌기 위해 초 터미널 동요한다.


스크립트

tput줄당 하나의 명령을 포함하는 스크립트를 허용하며 tput종료 전에 순서대로 실행 됩니다.

여러 줄 문자열을 에코하여 파이핑하여 임시 파일을 피하십시오.

echo -e "setf 7\nsetb 1" | tput -S  # set fg white and bg red

또한보십시오

  • 보다 man 1 tput
  • 참조 man 5 terminfo이러한 옵션에 대한 명령과 자세한 내용의 전체 목록을 보려면. (해당 tput명령은 Cap-name81 행에서 시작하는 거대한 테이블 의 열에 나열됩니다. )

13
좋은 대답입니다. 이것이 가장 도움이 된 것입니다. 내가 무엇을 궁금해하고 궁금해하는 사람이라면, $()명령 대체 입니다. 모든 tput af 1수행은 컬러 코드 문자열을 생성하지만, 입력하도록 코드는 인쇄 가능한 문자 수없는 tput af 1혼자하는 출력의 빈 줄을 생성합니다.
Chris Middleton

5
참고 : CygWin을 사용 중이고 tput 설치가없는 경우ncurses
Enrico

3
: tput을 또한 내부 읽기, 화려한 cruft에로 cruft에 구문 분석에 대한 나오지 작품 gist.github.com/nickboldt/fab71da10bd5169ffdfa을
nickboldt

1
전체 tput색상 목록을 보려면 Unix StackExchange
Andrew

나는 공간이 reset=`tput sgr0`있어야 한다고 생각 합니다 reset=`tput sgr 0`.
monkeypants

832

사용할 수있는 일부 변수 :

# Reset
Color_Off='\033[0m'       # Text Reset

# Regular Colors
Black='\033[0;30m'        # Black
Red='\033[0;31m'          # Red
Green='\033[0;32m'        # Green
Yellow='\033[0;33m'       # Yellow
Blue='\033[0;34m'         # Blue
Purple='\033[0;35m'       # Purple
Cyan='\033[0;36m'         # Cyan
White='\033[0;37m'        # White

# Bold
BBlack='\033[1;30m'       # Black
BRed='\033[1;31m'         # Red
BGreen='\033[1;32m'       # Green
BYellow='\033[1;33m'      # Yellow
BBlue='\033[1;34m'        # Blue
BPurple='\033[1;35m'      # Purple
BCyan='\033[1;36m'        # Cyan
BWhite='\033[1;37m'       # White

# Underline
UBlack='\033[4;30m'       # Black
URed='\033[4;31m'         # Red
UGreen='\033[4;32m'       # Green
UYellow='\033[4;33m'      # Yellow
UBlue='\033[4;34m'        # Blue
UPurple='\033[4;35m'      # Purple
UCyan='\033[4;36m'        # Cyan
UWhite='\033[4;37m'       # White

# Background
On_Black='\033[40m'       # Black
On_Red='\033[41m'         # Red
On_Green='\033[42m'       # Green
On_Yellow='\033[43m'      # Yellow
On_Blue='\033[44m'        # Blue
On_Purple='\033[45m'      # Purple
On_Cyan='\033[46m'        # Cyan
On_White='\033[47m'       # White

# High Intensity
IBlack='\033[0;90m'       # Black
IRed='\033[0;91m'         # Red
IGreen='\033[0;92m'       # Green
IYellow='\033[0;93m'      # Yellow
IBlue='\033[0;94m'        # Blue
IPurple='\033[0;95m'      # Purple
ICyan='\033[0;96m'        # Cyan
IWhite='\033[0;97m'       # White

# Bold High Intensity
BIBlack='\033[1;90m'      # Black
BIRed='\033[1;91m'        # Red
BIGreen='\033[1;92m'      # Green
BIYellow='\033[1;93m'     # Yellow
BIBlue='\033[1;94m'       # Blue
BIPurple='\033[1;95m'     # Purple
BICyan='\033[1;96m'       # Cyan
BIWhite='\033[1;97m'      # White

# High Intensity backgrounds
On_IBlack='\033[0;100m'   # Black
On_IRed='\033[0;101m'     # Red
On_IGreen='\033[0;102m'   # Green
On_IYellow='\033[0;103m'  # Yellow
On_IBlue='\033[0;104m'    # Blue
On_IPurple='\033[0;105m'  # Purple
On_ICyan='\033[0;106m'    # Cyan
On_IWhite='\033[0;107m'   # White

bash , hexoctal 각각 의 이스케이프 문자 :

|       | bash  | hex    | octal   | NOTE                         |
|-------+-------+--------+---------+------------------------------|
| start | \e    | \x1b   | \033    |                              |
| start | \E    | \x1B   | -       | x cannot be capital          |
| end   | \e[0m | \x1m0m | \033[0m |                              |
| end   | \e[m  | \x1b[m | \033[m  | 0 is appended if you omit it |
|       |       |        |         |                              |

짧은 예 :

| color       | bash         | hex            | octal          | NOTE                                  |
|-------------+--------------+----------------+----------------+---------------------------------------|
| start green | \e[32m<text> | \x1b[32m<text> | \033[32m<text> | m is NOT optional                     |
| reset       | <text>\e[0m  | <text>\1xb[0m  | <text>\033[om  | o is optional (do it as best practice |
|             |              |                |                |                                       |

배쉬 예외 :

특수 bash 변수 에서 이러한 코드를 사용하려는 경우

  • PS0
  • PS1
  • PS2 (= 이것은 프롬프트를위한 ​​것입니다)
  • PS4

이스케이프 문자를 추가하여 올바르게 해석 할 수 있습니다. 이스케이프 문자를 추가하지 않으면 작동하지만 Ctrl + r역사에서 검색에 사용할 때 문제가 발생합니다 .

bash에 대한 예외 규칙

당신은 추가해야 \[어떤 시작 ANSI 코드 전에 추가 \]어떤 결말들 후.
예 :
정기적으로 사용하는 경우 : \033[32mThis is in green\033[0m
PS0 / 1 / 2 / 4의 경우 : \[\033[32m\]This is in green\[\033[m\]

\[시퀀스의 시작을위한 인쇄 할 수없는 문자
\]의 시퀀스의 끝을위한 인쇄 할 수없는 문자

팁 : 암기 그것은 처음 추가 할 수 있습니다에 대한 \[\]다음 그 사이에 ANSI 코드를 넣어 :
- \[start-ANSI-code\]
-\[end-ANSI-code\]

색상 순서 유형 :

  1. 3/4 비트
  2. 8 비트
  3. 24 비트

이 색상으로 다이빙하기 전에 다음 코드를 사용하는 4 가지 모드를 알아야합니다.

1. 컬러 모드

NOT NOT text 스타일의 스타일을 수정합니다. 예를 들어 색상을 밝거나 어둡게 만듭니다.

  • 0 초기화
  • 1; 평소보다 가벼움
  • 2; 평상시보다 어둡습니다

이 모드는 널리 지원되지 않습니다. Gnome-Terminal을 완벽하게 지원합니다.

2. 텍스트 모드

이 모드는 색상이 아닌 텍스트 스타일을 수정하기위한 것입니다.

  • 3; 이탤릭체
  • 4; 밑줄
  • 5; 깜박임 (느리게)
  • 6; 깜박임 (빠름)
  • 7; 역전
  • 8; 숨는 장소
  • 9; 교차

거의 지원됩니다.
예를 들어 KDE-Konsole은 지원 5;하지만 Gnome-Terminal은 지원하지 않으며 Gnome은 지원 8;하지만 KDE는 지원 하지 않습니다.

3. 전경 모드

이 모드는 전경을 채색하는 데 사용됩니다.

4. 배경 모드

이 모드는 배경을 채색하기위한 것입니다.

아래 표는 3/4 비트 버전의 ANSI 색상을 요약 한 것입니다.

|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| color-mode | octal    | hex     | bash  | description      | example (= in octal)         | NOTE                                 |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|          0 | \033[0m  | \x1b[0m | \e[0m | reset any affect | echo -e "\033[0m"            | 0m equals to m                       |
|          1 | \033[1m  |         |       | light (= bright) | echo -e "\033[1m####\033[m"  | -                                    |
|          2 | \033[2m  |         |       | dark (= fade)    | echo -e "\033[2m####\033[m"  | -                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|  text-mode | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|          3 | \033[3m  |         |       | italic           | echo -e "\033[3m####\033[m"  |                                      |
|          4 | \033[4m  |         |       | underline        | echo -e "\033[4m####\033[m"  |                                      |
|          5 | \033[5m  |         |       | blink (slow)     | echo -e "\033[3m####\033[m"  |                                      |
|          6 | \033[6m  |         |       | blink (fast)     | ?                            | not wildly support                   |
|          7 | \003[7m  |         |       | reverse          | echo -e "\033[7m####\033[m"  | it affects the background/foreground |
|          8 | \033[8m  |         |       | hide             | echo -e "\033[8m####\033[m"  | it affects the background/foreground |
|          9 | \033[9m  |         |       | cross            | echo -e "\033[9m####\033[m"  |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| foreground | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         30 | \033[30m |         |       | black            | echo -e "\033[30m####\033[m" |                                      |
|         31 | \033[31m |         |       | red              | echo -e "\033[31m####\033[m" |                                      |
|         32 | \033[32m |         |       | green            | echo -e "\033[32m####\033[m" |                                      |
|         33 | \033[33m |         |       | yellow           | echo -e "\033[33m####\033[m" |                                      |
|         34 | \033[34m |         |       | blue             | echo -e "\033[34m####\033[m" |                                      |
|         35 | \033[35m |         |       | purple           | echo -e "\033[35m####\033[m" | real name: magenta = reddish-purple  |
|         36 | \033[36m |         |       | cyan             | echo -e "\033[36m####\033[m" |                                      |
|         37 | \033[37m |         |       | white            | echo -e "\033[37m####\033[m" |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         38 | 8/24     |                    This is for special use of 8-bit or 24-bit                                            |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| background | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         40 | \033[40m |         |       | black            | echo -e "\033[40m####\033[m" |                                      |
|         41 | \033[41m |         |       | red              | echo -e "\033[41m####\033[m" |                                      |
|         42 | \033[42m |         |       | green            | echo -e "\033[42m####\033[m" |                                      |
|         43 | \033[43m |         |       | yellow           | echo -e "\033[43m####\033[m" |                                      |
|         44 | \033[44m |         |       | blue             | echo -e "\033[44m####\033[m" |                                      |
|         45 | \033[45m |         |       | purple           | echo -e "\033[45m####\033[m" | real name: magenta = reddish-purple  |
|         46 | \033[46m |         |       | cyan             | echo -e "\033[46m####\033[m" |                                      |
|         47 | \033[47m |         |       | white            | echo -e "\033[47m####\033[m" |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         48 | 8/24     |                    This is for special use of 8-bit or 24-bit                                            |                                                                                       |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|

아래 표는 8 비트 버전의 ANSI 색상 요약을 보여줍니다.

|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| foreground | octal     | hex       | bash    | description      | example                            | NOTE                    |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
|        0-7 | \033[38;5 | \x1b[38;5 | \e[38;5 | standard. normal | echo -e '\033[38;5;1m####\033[m'   |                         |
|       8-15 |           |           |         | standard. light  | echo -e '\033[38;5;9m####\033[m'   |                         |
|     16-231 |           |           |         | more resolution  | echo -e '\033[38;5;45m####\033[m'  | has no specific pattern |
|    232-255 |           |           |         |                  | echo -e '\033[38;5;242m####\033[m' | from black to white     |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| foreground | octal     | hex       | bash    | description      | example                            | NOTE                    |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
|        0-7 |           |           |         | standard. normal | echo -e '\033[48;5;1m####\033[m'   |                         |
|       8-15 |           |           |         | standard. light  | echo -e '\033[48;5;9m####\033[m'   |                         |
|     16-231 |           |           |         | more resolution  | echo -e '\033[48;5;45m####\033[m'  |                         |
|    232-255 |           |           |         |                  | echo -e '\033[48;5;242m####\033[m' | from black to white     |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|

8 비트 빠른 테스트 :
for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Test"; done

아래 표는 24 비트 버전의 ANSI 색상 요약을 보여줍니다.

|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
| foreground | octal     | hex       | bash    | description | example                                  | NOTE            |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | R = red     | echo -e '\033[38;2;255;0;02m####\033[m'  | R=255, G=0, B=0 |
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | G = green   | echo -e '\033[38;2;;0;255;02m####\033[m' | R=0, G=255, B=0 |
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | B = blue    | echo -e '\033[38;2;0;0;2552m####\033[m'  | R=0, G=0, B=255 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
| background | octal     | hex       | bash    | description | example                                  | NOTE            |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | R = red     | echo -e '\033[48;2;255;0;02m####\033[m'  | R=255, G=0, B=0 |
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | G = green   | echo -e '\033[48;2;;0;255;02m####\033[m' | R=0, G=255, B=0 |
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | B = blue    | echo -e '\033[48;2;0;0;2552m####\033[m'  | R=0, G=0, B=255 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|

일부 스크린 샷

에서 전경 8 비트 요약 .gif

foreground.gif

배경 8 비트 요약 .gif

background.gif

값이있는 색상 요약

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

blinking KDE 터미널

KDE 깜박임

C더 많은 것을 보여주는 간단한 코드

cecho_screenshot

이 색상을 다루기 위해 개발 한 고급 도구 :

블라인드


컬러 모드 샷

페이드 노멀 브라이트

텍스트 모드 샷

유일한 텍스트 모드

결합 OK

결합시키다

더 많은 샷


고급 사용자 및 프로그래머를위한 팁과 요령 :

이 코드를 프로그래밍 언어로 사용할 수 있습니까?

그래 넌 할수있어. 나는 경험했다, , , ,

그들은 프로그램의 속도를 늦추고 있습니까?

나는 생각한다.

우리는 이것을 Windows에서 사용할 수 있습니까?

Win / 4에서 일부 스크린 샷으로 코드를 컴파일하는 경우 3/4 비트 예gcc

코드 길이를 계산하는 방법은 무엇입니까?

\033[ = 2, 다른 부분 1

이 코드를 어디에서 사용할 수 있습니까?

어느 곳이는이 tty통역
xterm, gnome-terminal, kde-terminal, mysql-client-CLI등을.
예를 들어 mysql로 ​​출력을 채색하려면 다음을 사용할 수 있습니다Perl

#!/usr/bin/perl -n
print "\033[1m\033[31m$1\033[36m$2\033[32m$3\033[33m$4\033[m" while /([|+-]+)|([0-9]+)|([a-zA-Z_]+)|([^\w])/g;

이 코드를 파일 이름 : pcc(= Perl Colorize Character)에 저장 한 다음 파일을 유효한 PATH곳에 놓고 원하는 곳에서 사용하십시오.

ls | pcc
df | pcc

내부에 mysql먼저 등록한 pager다음 시도하십시오.

[user2:db2] pager pcc
PAGER set to 'pcc'
[user2:db2] select * from table-name;

pcc

유니 코드를 처리 하지 않습니다 .

이 코드는 채색 만합니까?

아니요, 그들은 많은 흥미로운 일을 할 수 있습니다. 시험:

echo -e '\033[2K'  # clear the screen and do not move the position

또는:

echo -e '\033[2J\033[u' # clear the screen and reset the position

화면을 지우고 싶은 초보자가 system( "clear" )많으므로 system(3)통화 대신 이것을 사용할 수 있습니다.

유니 코드로 사용할 수 있습니까?

예. \u001b

이 색상 중 어떤 버전이 선호됩니까?

사용하기 쉽지만 사용 3/4-bit하기가 훨씬 정확하고 아름답습니다 24-bit.
당신이 경험이없는 경우그래서 여기에 빠른 튜토리얼
24 개 비트 수단 : 000000000000000000000000. 각 8 비트는 특정 색상을위한 것입니다.
1..8입니다 9..16위해 17..24위해
에 따라서 #FF0000수단 과 여기있다 : 255;0;0
#00FF00여기에있는 의미 : 0;255;0
의미가 있습니까? 원하는 세 가지 8 비트 값과 결합하십시오.


참조 :
Wikipedia
ANSI 이스케이프 시퀀스
tldp.org
tldp.org
misc.flogisoft.com
내가 기억하지 못하는 블로그 / 웹 페이지


69
이 답변에 진정으로 다른 사람이 있습니까?
Benj

14
이것은 명예의 전당 답변입니다, 감사합니다.
ForeverZer0

2
@ NeilGuyLindberg 8 진수 리터럴없습니다. 이 오류는 Node.js의 일부가 eslist 자체가 아닙니다. x1B[그것을 제거 하기 위해 사용할 수 있습니다 .
Shakiba Moshiri '10

5
나는이 답변을 찬성하기 위해 아주 뒤로 스크롤했다!
RNA

1
@ShakibaMoshiri는 xD 농담과는 별도로이 주제에 대한 논문을 작성하여 자세한 답변을 응원합니다.
SH

189

tputsetaf기능 및 매개 변수 와 함께 사용하십시오 1.

echo "$(tput setaf 1)Hello, world$(tput sgr0)"

8
이것이 최선의 선택이어야합니다. 무엇 tput을가 수행하는 것은 터미널 정보를 읽고 당신을 위해 제대로 탈출 ANSI 코드를 렌더링 것입니다. 코드 는 일부 터미널에서 readline 라이브러리를 \033[31m손상시킵니다 .
Tian Chen

44
간단한 루프를 사용하여 색상을 탐색하십시오 ( i더 많은 음영을 위해 상한을 증가시킵니다 ) :for (( i = 0; i < 17; i++ )); do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; done
msanford

2
다음은 입력 코드에 대한 하우투입니다. tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.html
maxywb

tput: command not found(알파인)
dgallant

127
echo -e "\033[31m Hello World"

[31m텍스트 색상을 제어합니다 :

  • 30- 37세트 전경 색상을
  • 40- 배경색을 47설정 합니다

보다 완전한 색상 코드 목록은 여기에서 찾을 수 있습니다 .

\033[0m문자열의 끝에서 텍스트 색상을 다시 설정하는 것이 좋습니다 .


2
echo -e "\ 033 [31m Hello World", [31m은 색상입니다.
Neocanable

36

나는 모든 솔루션에서 좋은 포수를 합병했으며 결국 다음과 같이 끝났습니다.

cecho(){
    RED="\033[0;31m"
    GREEN="\033[0;32m"
    YELLOW="\033[1;33m"
    # ... ADD MORE COLORS
    NC="\033[0m" # No Color

    printf "${!1}${2} ${NC}\n"
}

그리고 당신은 그것을 다음과 같이 부를 수 있습니다 :

cecho "RED" "Helloworld"

1
매우 실용적으로 GREEN, YELLOW, NC에서 작은 따옴표를 큰 따옴표로 바꿔야 스크립트에서 작동합니다.
ionescu77

1
훌륭한 솔루션 !!
David Kariuki

31

이것은 색상 스위치 \033[ 입니다. 역사를 참조하십시오 .

색상 코드1;32(연한 녹색), 0;34(청색), 1;34(연한 파랑) 등과 같습니다.

우리는 색깔 스위치 색상 시퀀스를 종료 \033[하고 0m어떤 색 코드를. 마크 업 언어에서 탭을 열고 닫는 것과 같습니다.

  SWITCH="\033["
  NORMAL="${SWITCH}0m"
  YELLOW="${SWITCH}1;33m"
  echo "${YELLOW}hello, yellow${NORMAL}"

간단한 색 echo 기능 솔루션 :

cecho() {
  local code="\033["
  case "$1" in
    black  | bk) color="${code}0;30m";;
    red    |  r) color="${code}1;31m";;
    green  |  g) color="${code}1;32m";;
    yellow |  y) color="${code}1;33m";;
    blue   |  b) color="${code}1;34m";;
    purple |  p) color="${code}1;35m";;
    cyan   |  c) color="${code}1;36m";;
    gray   | gr) color="${code}0;37m";;
    *) local text="$1"
  esac
  [ -z "$text" ] && local text="$color$2${code}0m"
  echo "$text"
}

cecho "Normal"
cecho y "Yellow!"

1
이 방법으로 마지막 text변수를 변경하여 text="$color${@: 2}${code}0m"색상 매개 변수를 제외한 전체 줄에 색상이 지정됩니다.
Shairon Toledo

@tomazahlin은 위에서 언급 한 것처럼 여러 번 에코에 -e를 추가합니다
Artem Medvedev

28

하나만 색상을 변경하는 깔끔한 방법 echo은 다음과 같은 기능을 정의하는 것입니다.

function coloredEcho(){
    local exp=$1;
    local color=$2;
    if ! [[ $color =~ '^[0-9]$' ]] ; then
       case $(echo $color | tr '[:upper:]' '[:lower:]') in
        black) color=0 ;;
        red) color=1 ;;
        green) color=2 ;;
        yellow) color=3 ;;
        blue) color=4 ;;
        magenta) color=5 ;;
        cyan) color=6 ;;
        white|*) color=7 ;; # white or invalid color
       esac
    fi
    tput setaf $color;
    echo $exp;
    tput sgr0;
}

용법:

coloredEcho "This text is green" green

또는 Drew의 답변에 언급 된 색상 코드를 직접 사용할 수 있습니다 .

coloredEcho "This text is green" 2

-n에코에 추가 하면 인라인 색상으로 사용할 수 있습니다echo "Red `coloredEcho "fox" red` jumps over the lazy dog"
sobi3ch

23

tput색상 코드를 계산하는 데 사용 합니다. \E[31;1m이식성이 떨어지기 때문에 ANSI 이스케이프 코드 (예 : 빨간색)를 사용하지 마십시오 . 예를 들어, OS X의 Bash는이를 지원하지 않습니다.

BLACK=`tput setaf 0`
RED=`tput setaf 1`
GREEN=`tput setaf 2`
YELLOW=`tput setaf 3`
BLUE=`tput setaf 4`
MAGENTA=`tput setaf 5`
CYAN=`tput setaf 6`
WHITE=`tput setaf 7`

BOLD=`tput bold`
RESET=`tput sgr0`

echo -e "hello ${RED}some red text${RESET} world"

18

이 질문은 계속해서 반복해서 대답되었습니다 :-) 그러나 왜 그렇지 않습니다.

처음 사용하는 tput것은 ASCII 코드를 수동으로 주입하는 것보다 현대 환경에서 더 휴대하기 쉽습니다.echo -E

빠른 bash 기능은 다음과 같습니다.

 say() {
     echo "$@" | sed \
             -e "s/\(\(@\(red\|green\|yellow\|blue\|magenta\|cyan\|white\|reset\|b\|u\)\)\+\)[[]\{2\}\(.*\)[]]\{2\}/\1\4@reset/g" \
             -e "s/@red/$(tput setaf 1)/g" \
             -e "s/@green/$(tput setaf 2)/g" \
             -e "s/@yellow/$(tput setaf 3)/g" \
             -e "s/@blue/$(tput setaf 4)/g" \
             -e "s/@magenta/$(tput setaf 5)/g" \
             -e "s/@cyan/$(tput setaf 6)/g" \
             -e "s/@white/$(tput setaf 7)/g" \
             -e "s/@reset/$(tput sgr0)/g" \
             -e "s/@b/$(tput bold)/g" \
             -e "s/@u/$(tput sgr 0 1)/g"
  }

이제 다음을 사용할 수 있습니다.

 say @b@green[[Success]] 

얻을 :

대담한 성공

휴대성에 대한 참고 사항 tput

tput(1)1986 년 9 월 최초 소스 코드 업로드

tput(1) X는 1990 년대 X / Open curses 시맨틱에서 사용 가능합니다 (1997 표준은 아래 언급 된 시맨틱을 가짐).

그래서, 그것은 (의 아주 ) 유비쿼터스.


이것은 꽤 멋지다! 이것을 몰랐다. 당신은의 가용성에 대해 뭔가 말할 수 있습니까 tput? 관리자 권한이없는 대부분의 서버에서 사용할 수 있습니까? 이 기술이 처음 '발명 된'위치에 대한 링크가 있습니까?
Redsandro

3
tput은이를 수행하는 표준 준수 방법이며, 터미널 기능을 아는 것과는 완전히 독립적입니다. 터미널이 주어진 기능을 지원하지 않으면 나사 이스케이프 코드를 밀지 않고 할 수있는 모든 것으로 정상적으로 다운 그레이드됩니다.
Ahmed Masud

1
bash 줄의 커서 위치가 엉망 이므로이 방법을 사용하지 않았습니다. 줄 끝 전에 무작위로 줄 바꿈되고 홈 또는 화살표 키를 사용할 때 줄 시작 부분으로 되돌아 가지 않습니다. 서투른 수동 이스케이프 코드로 돌아 가면이 문제가 해결됩니다.
Redsandro

2
@Resandro- 간격이없는 부분을 사용 $PS1하지 않고 사용하기 때문 \[...\]입니까? 입력 문자열과 함께 Bash PS1 마커를 계속 사용하십시오.
Toby Speight

이 기능은 sed 유틸리티의 차이점으로 인해 MacOsX에서 완전히 작동하지 않습니다. unix.stackexchange.com/questions/13711/…
Jeff

14

이 답변 에 @ k-five 감사합니다

declare -A colors
#curl www.bunlongheng.com/code/colors.png

# Reset
colors[Color_Off]='\033[0m'       # Text Reset

# Regular Colors
colors[Black]='\033[0;30m'        # Black
colors[Red]='\033[0;31m'          # Red
colors[Green]='\033[0;32m'        # Green
colors[Yellow]='\033[0;33m'       # Yellow
colors[Blue]='\033[0;34m'         # Blue
colors[Purple]='\033[0;35m'       # Purple
colors[Cyan]='\033[0;36m'         # Cyan
colors[White]='\033[0;37m'        # White

# Bold
colors[BBlack]='\033[1;30m'       # Black
colors[BRed]='\033[1;31m'         # Red
colors[BGreen]='\033[1;32m'       # Green
colors[BYellow]='\033[1;33m'      # Yellow
colors[BBlue]='\033[1;34m'        # Blue
colors[BPurple]='\033[1;35m'      # Purple
colors[BCyan]='\033[1;36m'        # Cyan
colors[BWhite]='\033[1;37m'       # White

# Underline
colors[UBlack]='\033[4;30m'       # Black
colors[URed]='\033[4;31m'         # Red
colors[UGreen]='\033[4;32m'       # Green
colors[UYellow]='\033[4;33m'      # Yellow
colors[UBlue]='\033[4;34m'        # Blue
colors[UPurple]='\033[4;35m'      # Purple
colors[UCyan]='\033[4;36m'        # Cyan
colors[UWhite]='\033[4;37m'       # White

# Background
colors[On_Black]='\033[40m'       # Black
colors[On_Red]='\033[41m'         # Red
colors[On_Green]='\033[42m'       # Green
colors[On_Yellow]='\033[43m'      # Yellow
colors[On_Blue]='\033[44m'        # Blue
colors[On_Purple]='\033[45m'      # Purple
colors[On_Cyan]='\033[46m'        # Cyan
colors[On_White]='\033[47m'       # White

# High Intensity
colors[IBlack]='\033[0;90m'       # Black
colors[IRed]='\033[0;91m'         # Red
colors[IGreen]='\033[0;92m'       # Green
colors[IYellow]='\033[0;93m'      # Yellow
colors[IBlue]='\033[0;94m'        # Blue
colors[IPurple]='\033[0;95m'      # Purple
colors[ICyan]='\033[0;96m'        # Cyan
colors[IWhite]='\033[0;97m'       # White

# Bold High Intensity
colors[BIBlack]='\033[1;90m'      # Black
colors[BIRed]='\033[1;91m'        # Red
colors[BIGreen]='\033[1;92m'      # Green
colors[BIYellow]='\033[1;93m'     # Yellow
colors[BIBlue]='\033[1;94m'       # Blue
colors[BIPurple]='\033[1;95m'     # Purple
colors[BICyan]='\033[1;96m'       # Cyan
colors[BIWhite]='\033[1;97m'      # White

# High Intensity backgrounds
colors[On_IBlack]='\033[0;100m'   # Black
colors[On_IRed]='\033[0;101m'     # Red
colors[On_IGreen]='\033[0;102m'   # Green
colors[On_IYellow]='\033[0;103m'  # Yellow
colors[On_IBlue]='\033[0;104m'    # Blue
colors[On_IPurple]='\033[0;105m'  # Purple
colors[On_ICyan]='\033[0;106m'    # Cyan
colors[On_IWhite]='\033[0;107m'   # White


color=${colors[$input_color]}
white=${colors[White]}
# echo $white



for i in "${!colors[@]}"
do
  echo -e "$i = ${colors[$i]}I love you$white"
done

결과

여기에 이미지 설명을 입력하십시오

이미지가 bash의 색상을 선택하는 데 도움 이 되기를 바랍니다.


14

당신이 사용하는 경우 zsh또는bash

black() {
    echo -e "\e[30m${1}\e[0m"
}

red() {
    echo -e "\e[31m${1}\e[0m"
}

green() {
    echo -e "\e[32m${1}\e[0m"
}

yellow() {
    echo -e "\e[33m${1}\e[0m"
}

blue() {
    echo -e "\e[34m${1}\e[0m"
}

magenta() {
    echo -e "\e[35m${1}\e[0m"
}

cyan() {
    echo -e "\e[36m${1}\e[0m"
}

gray() {
    echo -e "\e[90m${1}\e[0m"
}

black 'BLACK'
red 'RED'
green 'GREEN'
yellow 'YELLOW'
blue 'BLUE'
magenta 'MAGENTA'
cyan 'CYAN'
gray 'GRAY'

온라인으로 시도


14

텍스트와 배경 모두에 24 비트 RGB 트루 컬러 를 사용할 수 있습니다 !

 ESC[38;2;⟨r⟩;⟨g⟩;⟨bm  /*Foreground color*/
 ESC[48;2;⟨r⟩;⟨g⟩;⟨bm  /*Background color*/

빨간색 텍스트 및 닫는 태그 예 :

 echo -e "\e[38;2;255;0;0mHello world\e[0m"

발전기:

24 비트 : 16 비트에서 24 비트 컬러의 "트루 컬러"그래픽 카드가 일반화되면서 Xterm, KDE의 Konsole 및 모든 libvte 기반 터미널 (GNOME 터미널 포함)은 24 비트 전경 및 배경색 설정을 지원합니다 https : / /en.wikipedia.org/wiki/ANSI_escape_code#24-bit

내 스크립트에서 사용하는 것이 안전합니까?

예! 8 비트 및 16 비트 터미널은 사용 가능한 팔레트의 범위에서 색상을 대체로 표시하여 최고의 대비를 유지하며 파손되지 않습니다!


또한 아무도 ANSI 코드 7 반전 비디오 의 유용성을 눈치 채지 못했습니다 .

전경색과 배경색을 교환하여 모든 터미널 구성표 색상, 검은 색 또는 흰색 배경 또는 기타 환상적인 팔레트에서 읽을 수 있습니다.

예를 들어, 모든 곳에서 작동하는 빨간색 배경의 경우 :

echo -e "\033[31;7mHello world\e[0m";

다음은 터미널 내장 체계를 변경할 때의 모습입니다.

여기에 이미지 설명을 입력하십시오

이것은 gif에 사용되는 루프 스크립트입니다.

for i in {30..49};do echo -e "\033[$i;7mReversed color code $i\e[0m Hello world!";done

https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters를 참조 하십시오.


11

이 코드는 내 우분투 상자에서 작동합니다.

여기에 이미지 설명을 입력하십시오

echo -e "\x1B[31m foobar \x1B[0m"
echo -e "\x1B[32m foobar \x1B[0m"
echo -e "\x1B[96m foobar \x1B[0m"
echo -e "\x1B[01;96m foobar \x1B[0m"
echo -e "\x1B[01;95m foobar \x1B[0m"
echo -e "\x1B[01;94m foobar \x1B[0m"
echo -e "\x1B[01;93m foobar \x1B[0m"
echo -e "\x1B[01;91m foobar \x1B[0m"
echo -e "\x1B[01;90m foobar \x1B[0m"
echo -e "\x1B[01;89m foobar \x1B[0m"
echo -e "\x1B[01;36m foobar \x1B[0m"

이것은 문자 abcd를 모두 다른 색상으로 인쇄합니다.

echo -e "\x1B[0;93m a \x1B[0m b \x1B[0;92m c \x1B[0;93m d \x1B[0;94m"

For 루프 :

for (( i = 0; i < 17; i++ )); 
do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; 
done

여기에 이미지 설명을 입력하십시오


2
그건 그렇고 : 이것은 특정 버전의 우분투를 설치했지만 PuTTY를 사용하는 것에 크게 의존하지 않습니다!
urzeit

11

나는 그 주제에 대한 정보를 찾고있는 동안 Shakiba Moshiri 의 멋진 답변을 찾았 습니다 ... 그런 다음 아이디어가있었습니다 ... 매우 사용하기 매우 쉬운 멋진 기능으로 끝났습니다 😁
그래서 나는 그것을 공유했습니다 😉

https://github.com/ppo/bash-colors

사용법 : $(c <flags>) 내부 echo -e또는printf

 ┌───────┬─────────────────┬──────────┐   ┌───────┬─────────────────┬──────────┐
  Code   Style            Octal        Code   Style            Octal    
 ├───────┼─────────────────┼──────────┤   ├───────┼─────────────────┼──────────┤
    -    Foreground       \033[3..       B    Bold             \033[1m  
    _    Background       \033[4..       U    Underline        \033[4m  
 ├───────┼─────────────────┼──────────┤      F    Flash/blink      \033[5m  
    k    Black            ......0m       N    Negative         \033[7m  
    r    Red              ......1m    ├───────┼─────────────────┼──────────┤
    g    Green            ......2m       L    Normal (unbold)  \033[22m 
    y    Yellow           ......3m       0    Reset            \033[0m  
    b    Blue             ......4m    └───────┴─────────────────┴──────────┘
    m    Magenta          ......5m 
    c    Cyan             ......6m 
    w    White            ......7m 
 └───────┴─────────────────┴──────────┘

예 :

echo -e "$(c 0wB)Bold white$(c) and normal"
echo -e "Normal text… $(c r_yB)BOLD red text on yellow background… $(c _w)now on
  white background… $(c 0U) reset and underline… $(c) and back to normal."

10

가독성

코드 의 가독성 을 향상 시키려면 echo먼저 문자열을 사용한 후 다음을 사용하여 색상을 추가하십시오 sed.

echo 'Hello World!' | sed $'s/World/\e[1m&\e[0m/' 

1
나는이 답변을 정말로 좋아한다! sed 명령에서 $를 설명해 주시겠습니까?
Patrick

2
$ '<something>'은 sed가 아닌 bash 용입니다. bash에게 \ e를 이스케이프 시퀀스로 처리하고 "이스케이프"문자를 넣도록 지시합니다. 일반적으로 $ '\ t'또는 $ '\ n'과 같은 간단한 양식을 사용하여 탭이나 줄 바꿈 문자를 명령.
dsz

8

지금까지 가장 좋아하는 답변은 coloredEcho입니다.

다른 옵션을 게시하기 위해이 작은 도구 xcol을 확인할 수 있습니다.

https://ownyourbits.com/2017/01/23/colorize-your-stdout-with-xcol/

grep처럼 사용하면 각 인수에 대해 다른 색상으로 stdin을 채색합니다.

sudo netstat -putan | xcol httpd sshd dnsmasq pulseaudio conky tor Telegram firefox "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" ":[[:digit:]]+" "tcp." "udp." LISTEN ESTABLISHED TIME_WAIT

xcol 예

sed가 허용하는 정규식을 허용합니다.

이 도구는 다음 정의를 사용합니다.

#normal=$(tput sgr0)                      # normal text
normal=$'\e[0m'                           # (works better sometimes)
bold=$(tput bold)                         # make colors bold/bright
red="$bold$(tput setaf 1)"                # bright red text
green=$(tput setaf 2)                     # dim green text
fawn=$(tput setaf 3); beige="$fawn"       # dark yellow text
yellow="$bold$fawn"                       # bright yellow text
darkblue=$(tput setaf 4)                  # dim blue text
blue="$bold$darkblue"                     # bright blue text
purple=$(tput setaf 5); magenta="$purple" # magenta text
pink="$bold$purple"                       # bright magenta text
darkcyan=$(tput setaf 6)                  # dim cyan text
cyan="$bold$darkcyan"                     # bright cyan text
gray=$(tput setaf 7)                      # dim white text
darkgray="$bold"$(tput setaf 0)           # bold black = dark gray text
white="$bold$gray"                        # bright white text

스크립트에서 이러한 변수를 다음과 같이 사용합니다.

echo "${red}hello ${yellow}this is ${green}coloured${normal}"

6

우리의 게으른 사람 을 위해이 답변 을 확장하려면 :

function echocolor() { # $1 = string
    COLOR='\033[1;33m'
    NC='\033[0m'
    printf "${COLOR}$1${NC}\n"
}

echo "This won't be colored"
echocolor "This will be colorful"

2
터미널 이스케이프를 하드 코딩하지 마십시오. 사용 tput; 그게 다야!
Toby Speight

@TobySpeight 다중 플랫폼 지원 (이론상)에서는 사실 일 수 있지만 포스터가 자신의 세계에서 효과가있는 것으로 밝혀지면 왜 비슷한 세계의 다른 사람들이이 기술을 사용하지 않는지에 동의하지 않는 이유는 무엇입니까? 우분투 16.04 bash에서 비슷한 것을 시도하고 작동합니다. 이 플랫폼의 유일한 사용자로서 나는이 답변을 수용 할 만하다고 생각합니다. 나는 또한 사용 tput에 대한 scrc(커서를 복원 커서 저장)하지만. 이 답변은 나를 "게으른"것으로 부르지 만 "실용적"또는 "정확한 지점"이라고 할 수 있습니다.
WinEunuuchs2Unix

내 자신의 솔루션은 스크립트와 같은 모든 메시지에 대해 두 개의 외부 프로세스, 서브 셸 등을 포크하여 불쾌한 냄새가 나기 때문에 순수하게 쉘 내장으로 제한 된 이것과 비슷했습니다.
Naidu를 Amit

6

다른 색상으로 메시지 출력을 표시하려면 다음을 수행하십시오.

echo -e "\033[31;1mYour Message\033[0m"

-검정색 0; 30 진회색 1; 30

-빨간색 0; 31 연한 빨간색 1; 31

-녹색 0; 32 연한 녹색 1; 32

브라운 / 오렌지 0; 33 노랑 1; 33

-청색 0; 34 연청색 1; 34

-퍼플 0; 35 연보라 1; 35

시안 0; 36 시안 1; 36

-라이트 그레이 0; 37 화이트 1; 37


5

원시 ANSI 제어 시퀀스보다 tput을 반드시 사용해야합니다.

많은 다른 터미널 제어 언어가 있기 때문에 일반적으로 시스템에는 중간 통신 계층이 있습니다. 실제 코드는 현재 감지 된 터미널 유형에 대해 데이터베이스에서 조회되며 API 또는 셸에서 명령에 대한 표준화 된 요청을 제공합니다.

이 명령 중 하나는 tput입니다. tput적절한 경우 기능 이름 및 매개 변수라는 약어 세트를 승인 한 후 terminfo 데이터베이스에서 감지 된 터미널에 대한 올바른 이스케이프 시퀀스를 찾고 올바른 코드를 인쇄합니다 (터미널이 이해함).

에서 http://wiki.bash-hackers.org/scripting/terminalcodes

즉, bash-tint 라는 작은 도우미 라이브러리를 작성하여 tput 위에 다른 레이어를 추가하여 사용하기가 훨씬 간단합니다 (imho).

예: tint "white(Cyan(T)Magenta(I)Yellow(N)Black(T)) is bold(really) easy to use."

다음과 같은 결과가 나타납니다. 여기에 이미지 설명을 입력하십시오


5

현재 터미널에 특정한 이스케이프 코드를 하드 코딩하는 대신 사용해야합니다. tput .

이것은 내가 가장 좋아하는 데모 스크립트입니다.

#!/bin/bash

tput init

end=$(( $(tput colors)-1 ))
w=8
for c in $(seq 0 $end); do
    eval "$(printf "tput setaf %3s   " "$c")"; echo -n "$_"
    [[ $c -ge $(( w*2 )) ]] && offset=2 || offset=0
    [[ $(((c+offset) % (w-offset))) -eq $(((w-offset)-1)) ]] && echo
done

tput init

tput으로 출력되는 256 색


4

컬러 인쇄에 사용 하고 있습니다

#!/bin/bash
#--------------------------------------------------------------------+
#Color picker, usage: printf $BLD$CUR$RED$BBLU'Hello World!'$DEF     |
#-------------------------+--------------------------------+---------+
#       Text color        |       Background color         |         |
#-----------+-------------+--------------+-----------------+         |
# Base color|Lighter shade| Base color   | Lighter shade   |         |
#-----------+-------------+--------------+-----------------+         |
BLK='\e[30m'; blk='\e[90m'; BBLK='\e[40m'; bblk='\e[100m' #| Black   |
RED='\e[31m'; red='\e[91m'; BRED='\e[41m'; bred='\e[101m' #| Red     |
GRN='\e[32m'; grn='\e[92m'; BGRN='\e[42m'; bgrn='\e[102m' #| Green   |
YLW='\e[33m'; ylw='\e[93m'; BYLW='\e[43m'; bylw='\e[103m' #| Yellow  |
BLU='\e[34m'; blu='\e[94m'; BBLU='\e[44m'; bblu='\e[104m' #| Blue    |
MGN='\e[35m'; mgn='\e[95m'; BMGN='\e[45m'; bmgn='\e[105m' #| Magenta |
CYN='\e[36m'; cyn='\e[96m'; BCYN='\e[46m'; bcyn='\e[106m' #| Cyan    |
WHT='\e[37m'; wht='\e[97m'; BWHT='\e[47m'; bwht='\e[107m' #| White   |
#-------------------------{ Effects }----------------------+---------+
DEF='\e[0m'   #Default color and effects                             |
BLD='\e[1m'   #Bold\brighter                                         |
DIM='\e[2m'   #Dim\darker                                            |
CUR='\e[3m'   #Italic font                                           |
UND='\e[4m'   #Underline                                             |
INV='\e[7m'   #Inverted                                              |
COF='\e[?25l' #Cursor Off                                            |
CON='\e[?25h' #Cursor On                                             |
#------------------------{ Functions }-------------------------------+
# Text positioning, usage: XY 10 10 'Hello World!'                   |
XY () { printf "\e[$2;${1}H$3"; }                                   #|
# Print line, usage: line - 10 | line -= 20 | line 'Hello World!' 20 |
line () { printf -v _L %$2s; printf -- "${_L// /$1}"; }             #|
# Create sequence like {0..(X-1)}                                    |
que () { printf -v _N %$1s; _N=(${_N// / 1}); printf "${!_N[*]}"; } #|
#--------------------------------------------------------------------+

모든 기본 색상은 vars로 설정되며 XY, line 및 que와 같은 유용한 기능이 있습니다. 이 스크립트를 귀하의 것으로 사용하고 모든 색상 변수와 기능을 사용하십시오.


3

그리고 이것은 내가 모든 조합을보고 어느 것이 멋진 지 결정하는 데 사용했던 것입니다.

for (( i = 0; i < 8; i++ )); do
    for (( j = 0; j < 8; j++ )); do
        printf "$(tput setab $i)$(tput setaf $j)(b=$i, f=$j)$(tput sgr0)\n"
    done
done

2

나는 그것을 달성하기 위해 장식 을 작성 했습니다.

당신은 할 수 있습니다

pip install swag

이제 다음을 통해 모든 이스케이프 명령을 txt 파일로 지정된 대상에 설치할 수 있습니다.

swag install -d <colorsdir>

또는 더 쉬운 방법 :

swag install

색상을 설치합니다 ~/.colors.

다음과 같이 사용하십시오.

echo $(cat ~/.colors/blue.txt) This will be blue

또는이 방법은 실제로 더 흥미 롭습니다.

swag print -c red -t underline "I will turn red and be underlined"

asciinema 에서 확인하십시오 !


0

여기에 최근에 정리 한 간단한 작은 스크립트가 있습니다. "Toilet"을 사용하는 대신 파이프로 연결된 입력을 채색합니다.

File: color.bsh

#!/usr/bin/env bash 

## A.M.Danischewski 2015+(c) Free - for (all (uses and 
## modifications)) - except you must keep this notice intact. 

declare INPUT_TXT=""
declare    ADD_LF="\n" 
declare -i DONE=0
declare -r COLOR_NUMBER="${1:-247}"
declare -r ASCII_FG="\\033[38;05;"
declare -r COLOR_OUT="${ASCII_FG}${COLOR_NUMBER}m"

function show_colors() { 
   ## perhaps will add bg 48 to first loop eventually 
 for fgbg in 38; do for color in {0..256} ; do 
 echo -en "\\033[${fgbg};5;${color}m ${color}\t\\033[0m"; 
 (($((${color}+1))%10==0)) && echo; done; echo; done
} 

if [[ ! $# -eq 1 || ${1} =~ ^-. ]]; then 
  show_colors 
  echo " Usage: ${0##*/} <color fg>" 
  echo "  E.g. echo \"Hello world!\" | figlet | ${0##*/} 54" 
else  
 while IFS= read -r PIPED_INPUT || { DONE=1; ADD_LF=""; }; do 
  PIPED_INPUT=$(sed 's#\\#\\\\#g' <<< "${PIPED_INPUT}")
  INPUT_TXT="${INPUT_TXT}${PIPED_INPUT}${ADD_LF}"
  ((${DONE})) && break; 
 done
 echo -en "${COLOR_OUT}${INPUT_TXT}\\033[00m"
fi 

그런 다음 빨간색 (196)으로 호출하십시오.
$> echo "text you want colored red" | color.bsh 196


컬러 루프 로직은 튜토리얼이 괜찮은 아스키 색상에서 발견되었다 : misc.flogisoft.com/bash/tip_colors_and_formatting

-1

인용하다:

echo_red(){
    echo -e "\e[1;31m$1\e[0m"
}
echo_green(){
    echo -e "\e[1;32m$1\e[0m"
}
echo_yellow(){
    echo -e "\e[1;33m$1\e[0m"
}
echo_blue(){
    echo -e "\e[1;34m$1\e[0m"
}

echo_green 함수는 33이 아닌 코드 32 여야합니다. b / c 스택 오버 플로우를 편집 할 수 있으려면 6 자 이상이 필요합니다.
Daniel

-2

가장 간단하고 읽기 쉬운 솔루션은 다음과 같습니다. bashj ( https://sourceforge.net/projects/bashj/ )를 사용하면 다음 라인 중 하나를 선택하면됩니다.

#!/usr/bin/bash

W="Hello world!"
echo $W

R=130
G=60
B=190

echo u.colored($R,$G,$B,$W)

echo u.colored(255,127,0,$W)
echo u.red($W)
echo u.bold($W)
echo u.italic($W)

Y=u.yellow($W)
echo $Y
echo u.bold($Y)

256x256x256 터미널 응용 프로그램에서 색상을 지원하는 경우 색상을 사용할 수 있습니다.


-3

스레드에서 다른 솔루션을 혼합 한 후 npm scripts출력 에서 색상을 얻는 방법은 다음과 같습니다 (gitbash CLI).

{
    "deploy": "echo \u001b[1;32m && ng build && echo \u001b[1;0mdeploy {\u001b[1;33mcopy\u001b[1;0m: \u001b[1;32m0% && cp -r -f dist/packaged/* \\\\SERVER-01\\dist\\ && echo \u001b[1;0mdeploy {\u001b[1;33mcopy\u001b[1;0m} \u001b[1;34m\u001b[1;1m100% DEPLOYED"
}

여기에 이미지 설명을 입력하십시오


-4

약간의 무언가가있는 것처럼 grep을 통과하면 빨간색으로 강조 표시됩니다 (그러나 빨간색 만). 명명 된 파이프를 사용하여 문자열이 줄 끝에 가까워 지도록 할 수도 있습니다.

 grep '.*' --color=always <(echo "foobar")

선택한 색상을 선택할 수있는 시점이 없습니다. 또한 착색 유틸리티로 grep을 정말 의문이다 : P
아메드 마수드

실제로 OP는 빨간색을 원한다고 언급했습니다. 나는 grep을 사용하는 것보다 더 나은 옵션이 있다는 것에 동의하지만, 그들이 요구 한 것을 달성하고 더 복잡한 것을 배우지 않아도됩니다.
FinalDuty

-5
red='\e[0;31m'
NC='\e[0m' # No Color
echo -e "${red}Hello Stackoverflow${NC}"

색상에 대한 호출이 따옴표 안에 포함되어서는 안된다는 점을 제외하고는 정답입니다.

echo -e ${red}"Hello Stackoverflow"${NC}

트릭을해야합니다.


3
따옴표 안에 잘 작동합니다. -e 스위치는 인용 부호도 평가합니다. bash -x를 사용하여 내부 및 외부 따옴표를 모두 실행하면 동일한 실행 명령이 출력 echo -e '\e[0;31mHello Stackoverflow\e[0m'됩니다. bash도 마찬가지입니다.
naab
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.