echo 명령을 사용하여 터미널에서 텍스트를 인쇄하려고 합니다.
텍스트를 빨간색으로 인쇄하고 싶습니다. 어떻게 할 수 있습니까?
질문자 :satheesh.droid
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"
(빈 줄을 추가하지 않으려면 echo
사용할 때 "\n"
추가하지 마십시오.)
Ignacio의 답변 에서 제안한 tput
명령을 사용하여 모든 종류의 터미널 제어 코드를 생성할 수 있습니다.
특정 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)"
위의 명령은 Ubuntu에서 다음을 생성합니다.
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 RGB 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 YX # 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
compiz wobbly windows 에서 bel
명령은 사용자의 주의를 끌기 위해 1초 동안 터미널을 흔들게 만듭니다.
tput
tput
종료되기 전에 순서대로 실행되는 한 줄에 하나의 명령을 포함하는 스크립트를 허용합니다.
여러 줄 문자열을 에코하고 파이프하여 임시 파일을 피하십시오.
echo -e "setf 7\nsetb 1" | tput -S # set fg white and bg red
man 1 tput
참조man 5 terminfo
(해당 tput
명령은 81행에서 시작하는 거대한 테이블 Cap-name
열에 나열됩니다.) # 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 변수 에서 이러한 코드를 사용하려는 경우
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가지 모드에 대해 알아야 합니다.
텍스트가 아닌 색상의 스타일을 수정합니다. 예를 들어 색상을 밝거나 어둡게 만듭니다.
0
리셋1;
평소보다 가벼운2;
평소보다 어둡다이 모드는 널리 지원되지 않습니다. Gnome-Terminal을 완벽하게 지원합니다.
이 모드는 색상이 아닌 텍스트의 스타일을 수정하기 위한 모드입니다.
3;
이탤릭체4;
밑줄5;
깜박임(느림)6;
깜박임(빠르게)7;
뒤집다8;
숨다9;
줄을 긋다 거의 지원됩니다.
예를 들어 KDE-Konsole은 5;
그러나 Gnome-Terminal은 그렇지 않으며 Gnome은 8;
그러나 KDE는 그렇지 않습니다.
이 모드는 전경을 채색하기 위한 모드입니다.
이 모드는 배경을 채색하기 위한 모드입니다.
아래 표는 ANSI 색상 의 3/4비트 버전을 요약한 것입니다.
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------| | 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 | | |------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
아래 표는 ANSI 색상 의 8비트 버전을 요약한 것입니다.
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------| | 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
아래 표는 ANSI 색상 의 24비트 버전을 요약한 것입니다.
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------| | 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 | |------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
.gif
전경 8비트 요약
.gif
배경 8비트 요약
blinking
그래 넌 할수있어. 나는 bash , c , c++ , d perl , python을 경험했다.
제 생각에는 NO.
gcc
코드를 컴파일하는 경우
Win-7의 일부 스크린샷
\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)에 저장한 다음 파일 a를 유효한 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비트 값과 결합합니다.
참조:
위키피디아
ANSI 이스케이프 시퀀스
tldp.org
tldp.org
misc.flogisoft.com
내가 기억하지 못하는 일부 블로그/웹 페이지
setaf
기능 및 매개변수 1
과 함께 tput
을 사용하십시오.
echo "$(tput setaf 1)Hello, world$(tput sgr0)"
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"
Tobias의 답변에 대한 내 리프:
# Color RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' NC='\033[0m' # No Color function red { printf "${RED}$@${NC}\n" } function green { printf "${GREEN}$@${NC}\n" } function yellow { printf "${YELLOW}$@${NC}\n" }
이것은 색상 스위치 \033[
입니다. 역사를 참조하십시오.
색상 코드 는 1;32
(밝은 녹색), 0;34
(파란색), 1;34
(밝은 파란색) 등과 같습니다.
\033[
과 0m
, no -color 코드로 색상 시퀀스를 종료합니다. 마크업 언어에서 탭을 열고 닫는 것과 같습니다.
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!"
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
tput
을 사용하여 색상 코드를 계산합니다. ANSI 이스케이프 코드(예: \E[31;1m
는 이식성이 떨어지므로 사용하지 마십시오. 예를 들어 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"
나는 그 주제에 대한 정보를 찾는 동안 Shakiba Moshiri의 멋진 답변을 찾았습니다 ... 그러다 아이디어가 떠올랐 습니다... 그리고 그것은 매우 사용하기 쉬운 아주 좋은 기능으로 끝났습니다
그래서 나는 그것을 공유해야합니다
https://github.com/ppo/bash-colors
사용법: echo -e
또는 printf
내부의 $(c <flags>)
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 -E
통해 ASCII 코드를 수동으로 주입하는 것보다 tput
먼저 사용하는 것이 현대 환경에서 더 이식성이 있습니다.
다음은 빠른 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
이식성에 대한 참고 사항 1986년 9월에 처음 tput(1)
소스 코드가 업로드되었습니다.
tput(1)
은 1990년대에 X/Open curses 의미론에서 사용할 수 있었습니다(1997년 표준에는 아래에 언급된 의미론이 있습니다).
그래서, 그것은 ( 상당히 ) 유비쿼터스입니다.
이 답변에 대해 @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의 색상을 선택하는 데 도움이 되기를 바랍니다.:D
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"
발전기:
text.addEventListener("input",update) back.addEventListener("input",update) function update(){ let a = text.value.substr(1).match(/.{1,2}/g) let b = back.value.substr(1).match(/.{1,2}/g) out1.textContent = "echo -e \"\\" + `033[38;2;${parseInt(a[0],16)};${parseInt(a[1],16)};${parseInt(a[2],16)}mHello\"` out2.textContent = "echo -e \"\\" + `033[48;2;${parseInt(b[0],16)};${parseInt(b[1],16)};${parseInt(b[2],16)}mWorld!\"` }
div {padding:1rem;font-size:larger}
TEXT COLOR: <input type="color" id="text" value="#23233"> <br><div id="out1"></div> BACK COLOR: <input type="color" id="back" value="#FFFF00"> <br><div id="out2">
24비트: 16~24비트 색상의 "트루 컬러" 그래픽 카드가 일반화됨에 따라 Xterm, KDE의 Konsole 및 모든 libvte 기반 터미널(GNOME 터미널 포함)은 24비트 전경 및 배경 색상 설정을 지원합니다 https:/ /en.wikipedia.org/wiki/ANSI_escape_code#24비트
내 스크립트에서 사용해도 안전한가요?
예! 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 참조
현재 터미널에 특정한 이스케이프 코드를 하드 코딩하는 대신 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
이 코드는 내 Ubuntu 상자에서 작동합니다.
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 (( i = 0; i < 17; i++ )); do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; done
코드의 가독성 echo
sed
를 사용하여 나중에 색상을 추가할 수 있습니다.
echo 'Hello World!' | sed $'s/World/\e[1m&\e[0m/'
다른 색상으로 메시지 출력을 표시하려면 다음을 수행하십시오.
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
지금까지 내가 가장 좋아하는 답변은 colorsEcho입니다.
다른 옵션을 게시하기 위해 이 작은 도구 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}"
컬러 인쇄용으로 사용 하고 있어요
#!/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와 같은 유용한 기능도 있습니다. 이 스크립트를 귀하의 스크립트 중 하나에서 소싱하고 모든 색상 변수와 기능을 사용하십시오.
게으른 우리를 위해 이 답변 을 확장하려면:
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"
원시 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."
색상과 텍스트 모드를 "결합"할 수 있습니다.
#!/bin/bash echo red text / black background \(Reverse\) echo "\033[31;7mHello world\e[0m"; echo -e "\033[31;7mHello world\e[0m"; echo echo yellow text / red background echo "\033[32;41mHello world\e[0m"; echo -e "\033[32;41mHello world\e[0m"; echo "\033[0;32;41mHello world\e[0m"; echo -e "\033[0;32;41mHello world\e[0m"; echo echo yellow BOLD text / red background echo "\033[1;32;41mHello world\e[0m"; echo -e "\033[1;32;41mHello world\e[0m"; echo echo yellow BOLD text underline / red background echo "\033[1;4;32;41mHello world\e[0m"; echo -e "\033[1;4;32;41mHello world\e[0m"; echo "\033[1;32;4;41mHello world\e[0m"; echo -e "\033[1;32;4;41mHello world\e[0m"; echo "\033[4;32;41;1mHello world\e[0m"; echo -e "\033[4;32;41;1mHello world\e[0m"; echo
답변에 언급되지 않은 한 가지 할 수 있는 것은 이모지를 사용하여 출력물에 색상을 지정하는 것입니다!
echo : error message echo : warning message echo : ok status message echo : action message echo : Or anything you like and want to recognize immediately by color echo : Or with a specific emoji
이 방법은 특히 스크립트의 소스 편집기가 유니코드 표시를 지원할 때 매우 유용합니다. 그런 다음 실행하기 전에 소스에서 직접 다채로운 스크립트를 볼 수도 있습니다! :
VSCode 내부의 스크립트 파일 이미지
참고 : 이모티콘의 유니코드를 직접 전달해야 할 수도 있습니다.
echo $'\U0001f972' // this emoji:
유니코드 문자의 경우 대문자 U
또한 매우 드물지만 다음과 같이 코드를 전달해야 할 수도 있습니다.
echo <0001f972>
이것을 언급한 댓글의 @joanis에게 감사드립니다.
그리고 이것은 내가 모든 조합을 보고 멋진 것을 결정하는 데 사용한 것입니다.
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
나는 그것을 달성하기 위해 swag를 썼습니다.
그냥 할 수 있습니다
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 에서 확인하세요!
@nachoparker의 답변에서 영감을 받아 .bashrc
다음과 같이 저장합니다.
#### colours source xcol.sh ### tput foreground export tpfn=$'\e[0m' # normal export tpfb=$(tput bold) ## normal colours export tpf0=$(tput setaf 0) # black export tpf1=$(tput setaf 1) # red export tpf2=$(tput setaf 2) # green export tpf3=$(tput setaf 3) # yellow export tpf4=$(tput setaf 4) # blue export tpf5=$(tput setaf 5) # magenta export tpf6=$(tput setaf 6) # cyan export tpf7=$(tput setaf 7) # white # echo "${tpf0}black ${tpf1}red ${tpf2}green ${tpf3}yellow ${tpf4}blue ${tpf5}magenta ${tpf6}cyan ${tpf7}white${tpfn}" ## bold colours export tpf0b="$tpfb$tpf0" # bold black export tpf1b="$tpfb$tpf1" # bold red export tpf2b="$tpfb$tpf2" # bold green export tpf3b="$tpfb$tpf3" # bold yellow export tpf4b="$tpfb$tpf4" # bold blue export tpf5b="$tpfb$tpf5" # bold magenta export tpf6b="$tpfb$tpf6" # bold cyan export tpf7b="$tpfb$tpf7" # bold white # echo "${tpf0b}black ${tpf1b}red ${tpf2b}green ${tpf3b}yellow ${tpf4b}blue ${tpf5b}magenta ${tpf6b}cyan ${tpf7b}white${tpfn}"
export
통해 Bash 스크립트에서 tpf..
를 사용할 수 있습니다.
다음은 bash 셸 promt에서 텍스트 스타일을 쉽게 관리하는 간단한 스크립트입니다.
https://github.com/ferromauro/bash-palette
다음을 사용하여 코드를 가져옵니다.
source bash-palette.sh
echo 명령에서 가져온 변수를 사용하십시오(-e 옵션을 사용하십시오!):
echo -e ${PALETTE_GREEN}Color Green${PALETTE_RESET}
더 많은 요소를 결합할 수 있습니다.
echo -e ${PALETTE_GREEN}${PALETTE_BLINK}${PALETTE_RED_U}Green Blinking Text over Red Background${PALETTE_RESET}
다음은 가장 간단하고 읽기 쉬운 솔루션입니다. 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
색상은 터미널 응용 프로그램에서 지원하는 색상이 있는 경우 사용할 수 있습니다.
출처 : http:www.stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux
Git 관리 프로젝트의 모든 로컬 변경 사항을 이전 상태로 되돌리려면 어떻게 해야 합니까? (0) | 2021.11.30 |
---|---|
HTML의 id 속성에 유효한 값은 무엇입니까? (0) | 2021.11.30 |
Python에서 정적 클래스 변수가 가능합니까? (0) | 2021.11.30 |
격리된 환경을 만들기 위해 Vagrant 또는 Docker를 사용해야 합니까? [닫은] (0) | 2021.11.29 |
Node.js를 언제 사용할지 결정하는 방법은 무엇입니까? (0) | 2021.11.29 |