echo 명령을 사용하여 터미널에 텍스트를 인쇄하려고합니다.
텍스트를 붉은 색으로 인쇄하고 싶습니다. 어떻게해야합니까?
echo 명령을 사용하여 터미널에 텍스트를 인쇄하려고합니다.
텍스트를 붉은 색으로 인쇄하고 싶습니다. 어떻게해야합니까?
답변:
다음 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를 사용할 때 추가하지 마십시오 )
\e[0;31mHello Stackoverflow\e[0m
echo
백 슬래시 탈출을 가능하게 할 수 있습니다.
\x1B
대신 사용 \e
. \033
모든 플랫폼에 적합합니다.
for (( i = 30; i < 38; i++ )); do echo -e "\033[0;"$i"m Normal: (0;$i); \033[1;"$i"m Light: (1;$i)"; done
굉장한 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
대신 setab
및 setf
대신 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-name
81 행에서 시작하는 거대한 테이블 의 열에 나열됩니다. )$()
이 명령 대체 입니다. 모든 tput af 1
수행은 컬러 코드 문자열을 생성하지만, 입력하도록 코드는 인쇄 가능한 문자 수없는 tput af 1
혼자하는 출력의 빈 줄을 생성합니다.
ncurses
tput
색상 목록을 보려면 Unix StackExchange
reset=`tput sgr0`
있어야 한다고 생각 합니다 reset=`tput sgr 0`
.
# 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 | 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 변수 에서 이러한 코드를 사용하려는 경우
이스케이프 문자를 추가하여 세게 때리다올바르게 해석 할 수 있습니다. 이스케이프 문자를 추가하지 않으면 작동하지만 Ctrl + r
역사에서 검색에 사용할 때 문제가 발생합니다 .
당신은 추가해야 \[
어떤 시작 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\]
이 색상으로 다이빙하기 전에 다음 코드를 사용하는 4 가지 모드를 알아야합니다.
NOT NOT text 스타일의 스타일을 수정합니다. 예를 들어 색상을 밝거나 어둡게 만듭니다.
0
초기화 1;
평소보다 가벼움 2;
평상시보다 어둡습니다 이 모드는 널리 지원되지 않습니다. Gnome-Terminal을 완벽하게 지원합니다.
이 모드는 색상이 아닌 텍스트 스타일을 수정하기위한 것입니다.
3;
이탤릭체 4;
밑줄 5;
깜박임 (느리게)6;
깜박임 (빠름)7;
역전 8;
숨는 장소 9;
교차 거의 지원됩니다.
예를 들어 KDE-Konsole은 지원 5;
하지만 Gnome-Terminal은 지원하지 않으며 Gnome은 지원 8;
하지만 KDE는 지원 하지 않습니다.
이 모드는 전경을 채색하는 데 사용됩니다.
이 모드는 배경을 채색하기위한 것입니다.
아래 표는 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
배경 8 비트 요약 .gif
blinking
KDE 터미널그래 넌 할수있어. 나는 경험했다세게 때리다, 씨, C ++, 디 펄, 파이썬
나는 생각한다.
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;
유니 코드를 처리 하지 않습니다 .
아니요, 그들은 많은 흥미로운 일을 할 수 있습니다. 시험:
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
.
당신이 경험이없는 경우html그래서 여기에 빠른 튜토리얼
24 개 비트 수단 : 00000000
및 00000000
및 00000000
. 각 8 비트는 특정 색상을위한 것입니다.
1..8
입니다 및 9..16
위해 및 17..24
위해
에 따라서html #FF0000
수단 과 여기있다 : 255;0;0
에html #00FF00
여기에있는 의미 : 0;255;0
의미가 있습니까? 원하는 세 가지 8 비트 값과 결합하십시오.
참조 :
Wikipedia
ANSI 이스케이프 시퀀스
tldp.org
tldp.org
misc.flogisoft.com
내가 기억하지 못하는 블로그 / 웹 페이지
x1B[
그것을 제거 하기 위해 사용할 수 있습니다 .
tput
의 setaf
기능 및 매개 변수 와 함께 사용하십시오 1
.
echo "$(tput setaf 1)Hello, world$(tput sgr0)"
\033[31m
손상시킵니다 .
i
더 많은 음영을 위해 상한을 증가시킵니다 ) :for (( i = 0; i < 17; i++ )); do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; done
tput: command not found
(알파인)
echo -e "\033[31m Hello World"
은 [31m
텍스트 색상을 제어합니다 :
30
- 37
세트 전경 색상을40
- 배경색을 47
설정 합니다보다 완전한 색상 코드 목록은 여기에서 찾을 수 있습니다 .
\033[0m
문자열의 끝에서 텍스트 색상을 다시 설정하는 것이 좋습니다 .
나는 모든 솔루션에서 좋은 포수를 합병했으며 결국 다음과 같이 끝났습니다.
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"
이것은 색상 스위치 \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!"
text
변수를 변경하여 text="$color${@: 2}${code}0m"
색상 매개 변수를 제외한 전체 줄에 색상이 지정됩니다.
하나만 색상을 변경하는 깔끔한 방법 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"
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"
이 질문은 계속해서 반복해서 대답되었습니다 :-) 그러나 왜 그렇지 않습니다.
처음 사용하는 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
? 관리자 권한이없는 대부분의 서버에서 사용할 수 있습니까? 이 기술이 처음 '발명 된'위치에 대한 링크가 있습니까?
$PS1
하지 않고 사용하기 때문 \[...\]
입니까? 입력 문자열과 함께 Bash PS1 마커를 계속 사용하십시오.
이 답변 에 @ 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의 색상을 선택하는 데 도움 이 되기를 바랍니다.
당신이 사용하는 경우 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'
텍스트와 배경 모두에 24 비트 RGB 트루 컬러 를 사용할 수 있습니다 !
ESC[38;2;⟨r⟩;⟨g⟩;⟨b⟩m /*Foreground color*/
ESC[48;2;⟨r⟩;⟨g⟩;⟨b⟩m /*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를 참조 하십시오.
이 코드는 내 우분투 상자에서 작동합니다.
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
나는 그 주제에 대한 정보를 찾고있는 동안 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."
코드 의 가독성 을 향상 시키려면 echo
먼저 문자열을 사용한 후 다음을 사용하여 색상을 추가하십시오 sed
.
echo 'Hello World!' | sed $'s/World/\e[1m&\e[0m/'
지금까지 가장 좋아하는 답변은 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
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}"
우리의 게으른 사람 을 위해이 답변 을 확장하려면 :
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"
tput
; 그게 다야!
tput
에 대한 sc
과 rc
(커서를 복원 커서 저장)하지만. 이 답변은 나를 "게으른"것으로 부르지 만 "실용적"또는 "정확한 지점"이라고 할 수 있습니다.
원시 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."
현재 터미널에 특정한 이스케이프 코드를 하드 코딩하는 대신 사용해야합니다. 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
컬러 인쇄에 사용 하고 있습니다
#!/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와 같은 유용한 기능이 있습니다. 이 스크립트를 귀하의 것으로 사용하고 모든 색상 변수와 기능을 사용하십시오.
나는 그것을 달성하기 위해 장식 을 작성 했습니다.
당신은 할 수 있습니다
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 에서 확인하십시오 !
여기에 최근에 정리 한 간단한 작은 스크립트가 있습니다. "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
가장 간단하고 읽기 쉬운 솔루션은 다음과 같습니다. 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
터미널 응용 프로그램에서 색상을 지원하는 경우 색상을 사용할 수 있습니다.
스레드에서 다른 솔루션을 혼합 한 후 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"
}
약간의 무언가가있는 것처럼 grep을 통과하면 빨간색으로 강조 표시됩니다 (그러나 빨간색 만). 명명 된 파이프를 사용하여 문자열이 줄 끝에 가까워 지도록 할 수도 있습니다.
grep '.*' --color=always <(echo "foobar")
red='\e[0;31m'
NC='\e[0m' # No Color
echo -e "${red}Hello Stackoverflow${NC}"
색상에 대한 호출이 따옴표 안에 포함되어서는 안된다는 점을 제외하고는 정답입니다.
echo -e ${red}"Hello Stackoverflow"${NC}
트릭을해야합니다.
echo -e '\e[0;31mHello Stackoverflow\e[0m'
됩니다. bash도 마찬가지입니다.