sat*_*oid 1582 linux bash command-line echo terminal-color
我正在尝试使用echo命令在终端中打印文本.
我想以红色打印文本.我怎样才能做到这一点?
Tob*_*ias 2107
您可以使用这些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
Run Code Online (Sandbox Code Playgroud)
然后在脚本中使用它们:
# .---------- 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"
Run Code Online (Sandbox Code Playgroud)
love
以红色打印.
从@james-lim的评论中,如果您使用该echo
命令,请务必使用-e标志来允许反斜杠转义.
# Continued from above example
echo -e "I ${RED}love${NC} Stack Overflow"
Run Code Online (Sandbox Code Playgroud)
("\n"
除非你想添加额外的空行,否则不要在使用echo时添加)
Dre*_*kes 885
您可以使用awesome tput
命令(在Ignacio的答案中建议)为各种事物生成终端控制代码.
tput
稍后将讨论特定的子命令.
tput
作为一系列命令的一部分调用:
tput setaf 1; echo "this is red text"
Run Code Online (Sandbox Code Playgroud)
如果文本仍然显示错误,请使用;
而不是.&&
tput
另一种选择是使用shell变量:
red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
echo "${red}red text ${green}green text${reset}"
Run Code Online (Sandbox Code Playgroud)
tput
产生由终端解释为具有特殊含义的字符序列.他们不会自己出现.请注意,它们仍然可以保存到文件中或由终端以外的程序作为输入处理.
使用命令替换将tput
输出直接插入echo
字符串可能更方便:
echo "$(tput setaf 1)Red text $(tput setab 7)and white background$(tput sgr 0)"
Run Code Online (Sandbox Code Playgroud)
上面的命令在Ubuntu上生成:
tput setab [1-7] # Set the background colour using ANSI escape
tput setaf [1-7] # Set the foreground colour using ANSI escape
Run Code Online (Sandbox Code Playgroud)
颜色如下:
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
Run Code Online (Sandbox Code Playgroud)
还有非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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
tput sgr0 # Reset text format to the terminal's default
tput bel # Play a bell
Run Code Online (Sandbox Code Playgroud)
使用compiz摇摆不定的窗口,该bel
命令使终端摆动一秒钟以引起用户的注意.
tput
接受每行包含一个命令的脚本,这些脚本在tput
退出之前按顺序执行.
通过回显多行字符串并管道来避免临时文件:
echo -e "setf 7\nsetb 1" | tput -S # set fg white and bg red
Run Code Online (Sandbox Code Playgroud)
man 1 tput
man 5 terminfo
这些选项的详细命令列表和详细信息,请参阅参考资料.(相应的tput
命令列在Cap-name
从第81行开始的巨大表的列中.)Sha*_*iri 715
# 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
Run Code Online (Sandbox Code Playgroud)
| | 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 |
| | | | | |
Run Code Online (Sandbox Code Playgroud)
| 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 |
| | | | | |
Run Code Online (Sandbox Code Playgroud)
如果您要在特殊的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;
划掉 and are almost supported.
For example KDE-Konsole supports 5;
but Gnome-Terminal does not and Gnome supports 8;
but KDE does not.
This mode is for colorizing the foreground.
This mode is for colorizing the background.
The below table shows a summary of 3/4 bit version of ANSI-color
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| 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[32m | | | yellow | echo -e "\033[33m####\033[m" | |
| 34 | \033[32m | | | blue | echo -e "\033[34m####\033[m" | |
| 35 | \033[32m | | | purple | echo -e "\033[35m####\033[m" | real name: magenta = reddish-purple |
| 36 | \033[32m | | | cyan | echo -e "\033[36m####\033[m" | |
| 37 | \033[32m | | | 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 | |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
Run Code Online (Sandbox Code Playgroud)
The below table shows a summary of 8 bit version of ANSI-color
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| 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 |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
Run Code Online (Sandbox Code Playgroud)
The 8-bit fast test:
for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Test"; done
The below table shows a summary of 24 bit version of ANSI-color
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
| 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 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
Run Code Online (Sandbox Code Playgroud)
foreground 8-bit summary in a .gif
background 8-bit summary in a .gif
blinking
on KDE-Terminal
a simple
C
code that shows you more
a more advanced tool that I developed to deal with these colors:
Yes, you can. I experienced in bash, c, c++, d perl, python
I think, NO.
3/4-bit Yes, if you compile the code with gcc
some screen-shots on Win-7
\033[
= 2, other parts 1
Anywhere that has a tty
interpreter
xterm
, gnome-terminal
, kde-terminal
, mysql-client-CLI
and so on.
For example if you want to colorize your output with mysql you can use 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;
Run Code Online (Sandbox Code Playgroud)
store this code in a file name: pcc
(= Perl Colorize Character) and then put the file a in valid PATH
then use it anywhere you like.
ls | pcc
df | pcc
inside mysql
first register it for pager
and then try:
[user2:db2] pager pcc
PAGER set to 'pcc'
[user2:db2] select * from table-name;
Run Code Online (Sandbox Code Playgroud)
It does NOT handle Unicode.
No, they can do a lot of interesting things. Try:
echo -e '\033[2K' # clear the screen and do not move the position
Run Code Online (Sandbox Code Playgroud)
or:
echo -e '\033[2J\033[u' # clear the screen and reset the position
Run Code Online (Sandbox Code Playgroud)
There are a lot of beginners that want to clear the screen with system( "clear" )
so you can use this instead of system(3)
call
Yes. \u001b
It is easy to use 3/4-bit
, but it is much accurate and beautiful to use 24-bit
.
If you do not have experience with html so here is a quick tutorial:
24 bits means: 00000000
and 00000000
and 00000000
. Each 8-bit is for a specific color.
1..8
is for and
9..16
for and
17..24
for
So in html #FF0000
means and here it is:
255;0;0
in html #00FF00
means which here is:
0;255;0
Does that make sense? what color you want combine it with these three 8-bit values.
参考:
维基百科
ANSI转义序列
tldp.org
tldp.org
misc.flogisoft.com
一些我不记得的博客/网页
Ign*_*ams 178
使用tput
与setaf
能力的参数1
.
echo "$(tput setaf 1)Hello, world$(tput sgr0)"
Run Code Online (Sandbox Code Playgroud)
neo*_*ble 116
echo -e "\033[31m Hello World"
Run Code Online (Sandbox Code Playgroud)
该[31m
控件的文本颜色:
30
- 37
设置前景色的颜色40
- 47
设置背景颜色可以在此处找到更完整的颜色代码列表.
最好将文本颜色重置回\033[0m
字符串的末尾.
wyt*_*ten 37
我对托比亚斯的回答的即兴演奏:
# 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"
}
Run Code Online (Sandbox Code Playgroud)
col*_*fix 36
其他答案已经对如何做到这一点给出了很好的解释。我仍然缺少的是对颜色代码的精心安排的概述。维基百科文章“ANSI escape code”对此非常有帮助。然而,由于颜色通常可以配置并且在每个终端中看起来不同,所以我更喜欢有一个可以在终端中调用的函数。为此,我创建了以下函数来显示颜色表并提醒我如何设置它们(其排列方式受到维基文章的启发)。例如,您可以将它们加载到 .bashrc/.zshrc 中或将它们作为脚本放在某处。
\n由这个 bash/zsh 脚本生成:
\nfunction showcolors256() {\n local row col blockrow blockcol red green blue\n local showcolor=_showcolor256_${1:-bg}\n local white="\\033[1;37m"\n local reset="\\033[0m"\n\n echo -e "Set foreground color: \\\\\\\\033[38;5;${white}NNN${reset}m"\n echo -e "Set background color: \\\\\\\\033[48;5;${white}NNN${reset}m"\n echo -e "Reset color & style: \\\\\\\\033[0m"\n echo\n\n echo 16 standard color codes:\n for row in {0..1}; do\n for col in {0..7}; do\n $showcolor $(( row*8 + col )) $row\n done\n echo\n done\n echo\n\n echo 6\xc2\xb76\xc2\xb76 RGB color codes:\n for blockrow in {0..2}; do\n for red in {0..5}; do\n for blockcol in {0..1}; do\n green=$(( blockrow*2 + blockcol ))\n for blue in {0..5}; do\n $showcolor $(( red*36 + green*6 + blue + 16 )) $green\n done\n echo -n " "\n done\n echo\n done\n echo\n done\n\n echo 24 grayscale color codes:\n for row in {0..1}; do\n for col in {0..11}; do\n $showcolor $(( row*12 + col + 232 )) $row\n done\n echo\n done\n echo\n}\n\nfunction _showcolor256_fg() {\n local code=$( printf %03d $1 )\n echo -ne "\\033[38;5;${code}m"\n echo -nE " $code "\n echo -ne "\\033[0m"\n}\n\nfunction _showcolor256_bg() {\n if (( $2 % 2 == 0 )); then\n echo -ne "\\033[1;37m"\n else\n echo -ne "\\033[0;30m"\n fi\n local code=$( printf %03d $1 )\n echo -ne "\\033[48;5;${code}m"\n echo -nE " $code "\n echo -ne "\\033[0m"\n}\n
Run Code Online (Sandbox Code Playgroud)\n由这个 bash/zsh 脚本生成:
\nfunction showcolors16() {\n _showcolor "\\033[0;30m" "\\033[1;30m" "\\033[40m" "\\033[100m"\n _showcolor "\\033[0;31m" "\\033[1;31m" "\\033[41m" "\\033[101m"\n _showcolor "\\033[0;32m" "\\033[1;32m" "\\033[42m" "\\033[102m"\n _showcolor "\\033[0;33m" "\\033[1;33m" "\\033[43m" "\\033[103m"\n _showcolor "\\033[0;34m" "\\033[1;34m" "\\033[44m" "\\033[104m"\n _showcolor "\\033[0;35m" "\\033[1;35m" "\\033[45m" "\\033[105m"\n _showcolor "\\033[0;36m" "\\033[1;36m" "\\033[46m" "\\033[106m"\n _showcolor "\\033[0;37m" "\\033[1;37m" "\\033[47m" "\\033[107m"\n}\n\nfunction _showcolor() {\n for code in $@; do\n echo -ne "$code"\n echo -nE " $code"\n echo -ne " \\033[0m "\n done\n echo\n}\n
Run Code Online (Sandbox Code Playgroud)\n
Jor*_*ran 30
这是颜色开关 \033[
.看历史.
颜色代码如1;32
(浅绿色),0;34
(蓝色),1;34
(浅蓝色)等.
我们用颜色切换终止颜色顺序\033[
和0m
中,没有 -color代码.就像用标记语言打开和关闭标签一样.
SWITCH="\033["
NORMAL="${SWITCH}0m"
YELLOW="${SWITCH}1;33m"
echo "${YELLOW}hello, yellow${NORMAL}"
Run Code Online (Sandbox Code Playgroud)
简单的色彩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!"
Run Code Online (Sandbox Code Playgroud)
And*_*uib 30
我刚刚合并了所有解决方案中的好方法,最后得出:
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"
}
Run Code Online (Sandbox Code Playgroud)
您可以将其称为:
cecho "RED" "Helloworld"
Run Code Online (Sandbox Code Playgroud)
Ali*_*ian 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;
}
Run Code Online (Sandbox Code Playgroud)
用法:
coloredEcho "This text is green" green
Run Code Online (Sandbox Code Playgroud)
或者您可以直接使用Drew的答案中提到的颜色代码:
coloredEcho "This text is green" 2
Run Code Online (Sandbox Code Playgroud)
Pas*_*nus 24
我在查找有关该主题的信息时发现了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 ?
??????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
例子:
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."
Run Code Online (Sandbox Code Playgroud)
Wil*_*hes 22
使用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"
Run Code Online (Sandbox Code Playgroud)
Moj*_*ini 21
one thing you can do that is not mentioned in the answer is to use emojis to color your output!
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
Run Code Online (Sandbox Code Playgroud)
This method is very useful especially when your source editor for the script supports displaying Unicode. Then you can also see the colorful script even before running it and directly in the source! :
Image of a script file inside the VSCode
Note: You may need to pass the Unicode of the emoji directly:
echo $'\U0001f972' // this emoji:
Run Code Online (Sandbox Code Playgroud)
Note the capital U
for Unicode characters >= 10000
Also, It's very rare but you may need to pass the code like this:
echo <0001f972>
Run Code Online (Sandbox Code Playgroud)
Thanks to @joanis from comments for mentioning this
Ahm*_*sud 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"
}
Run Code Online (Sandbox Code Playgroud)
现在你可以使用:
say @b@green[[Success]]
Run Code Online (Sandbox Code Playgroud)
要得到:
tput
第一次tput(1)
源代码于1986年9月上传
tput(1)
已经在20世纪90年代的X/Open curses语义中可用(1997年标准具有下面提到的语义).
所以,它(非常)无所不在.
Bru*_*sky 15
I 而不是硬编码特定于您当前终端的转义码,您应该使用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
Run Code Online (Sandbox Code Playgroud)
kyo*_*kyo 13
感谢@ 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
Run Code Online (Sandbox Code Playgroud)
希望这张图片可以帮助你为你的bash挑选颜色:D
Oli*_*ing 12
这是我最终使用的sed
echo " [timestamp] production.FATAL Some Message\n" \
"[timestamp] production.ERROR Some Message\n" \
"[timestamp] production.WARNING Some Message\n" \
"[timestamp] production.INFO Some Message\n" \
"[timestamp] production.DEBUG Some Message\n" | sed \
-e "s/FATAL/"$'\e[31m'"&"$'\e[m'"/" \
-e "s/ERROR/"$'\e[31m'"&"$'\e[m'"/" \
-e "s/WARNING/"$'\e[33m'"&"$'\e[m'"/" \
-e "s/INFO/"$'\e[32m'"&"$'\e[m'"/" \
-e "s/DEBUG/"$'\e[34m'"&"$'\e[m'"/"
Run Code Online (Sandbox Code Playgroud)
Eri*_*ski 11
这些代码适用于我的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"
Run Code Online (Sandbox Code Playgroud)
这将以不同的颜色打印字母abcd:
echo -e "\x1B[0;93m a \x1B[0m b \x1B[0;92m c \x1B[0;93m d \x1B[0;94m"
Run Code Online (Sandbox Code Playgroud)
对于循环:
for (( i = 0; i < 17; i++ ));
do echo "$(tput setaf $i)This is ($i) $(tput sgr0)";
done
Run Code Online (Sandbox Code Playgroud)
如果您想提高代码的可读性,可以echo
首先使用字符串,然后使用sed
以下方法添加颜色:
echo 'Hello World!' | sed $'s/World/\e[1m&\e[0m/'
Run Code Online (Sandbox Code Playgroud)
没有人注意到ANSI代码7 反转视频的有用性.
通过交换前景色和背景色,它可以在任何终端方案颜色,黑色或白色背景或其他幻想调色板上保持可读性.
例如,对于无处不在的红色背景:
ESC[38;2;?r?;?g?;?b?m /*Foreground color*/
ESC[48;2;?r?;?g?;?b?m /*Background color*/
Run Code Online (Sandbox Code Playgroud)
这是改变终端内置方案时的外观:
这是用于gif的循环脚本.
echo -e "\e[38;2;255;0;0mHello world\e[0m"
Run Code Online (Sandbox Code Playgroud)
请参阅https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters
要显示具有不同颜色的消息输出,您可以:
echo -e "\033[31;1mYour Message\033[0m"
Run Code Online (Sandbox Code Playgroud)
-黑色 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
到目前为止,我最喜欢的答案是有色的Echo.
只是发布另一个选项,你可以查看这个小工具xcol
https://ownyourbits.com/2017/01/23/colorize-your-stdout-with-xcol/
你就像使用grep一样使用它,例如,它会为每个参数用不同的颜色着色它的标准输入
sudo netstat -putan | xcol httpd sshd dnsmasq pulseaudio conky tor Telegram firefox "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" ":[[:digit:]]+" "tcp." "udp." LISTEN ESTABLISHED TIME_WAIT
Run Code Online (Sandbox Code Playgroud)
请注意,它接受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
Run Code Online (Sandbox Code Playgroud)
我在我的脚本中使用这些变量
echo "${red}hello ${yellow}this is ${green}coloured${normal}"
Run Code Online (Sandbox Code Playgroud)
我用它进行彩色打印
#!/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[*]}"; } #|
#--------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
所有基本颜色都设置为变量,还有一些有用的功能:XY、线和队列。在您的其中一个脚本中获取此脚本并使用所有颜色变量和函数。
为了扩展这个答案,为了我们的懒惰:
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"
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以在bash脚本中定义颜色,如下所示:
red=$'\e[1;31m'
grn=$'\e[1;32m'
yel=$'\e[1;33m'
blu=$'\e[1;34m'
mag=$'\e[1;35m'
cyn=$'\e[1;36m'
end=$'\e[0m'
Run Code Online (Sandbox Code Playgroud)
然后使用它们以您需要的颜色进行打印:
printf "%s\n" "Text in ${red}red${end}, white and ${blu}blue${end}."
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以“组合”颜色和文本模式。
#!/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
Run Code Online (Sandbox Code Playgroud)
这是我用来查看所有组合并决定哪个读起来很酷的:
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
Run Code Online (Sandbox Code Playgroud)
绝对应该在原始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."
如果您使用的是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'
Run Code Online (Sandbox Code Playgroud)