如何在Linux中更改echo的输出颜色

satheesh.droid 1582 linux bash command-line echo terminal-color

我正在尝试使用echo命令在终端中打印文本.

我想以红色打印文本.我怎样才能做到这一点?

Tobias.. 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

然后在脚本中使用它们:

#    .---------- 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"试了吗?它告诉`echo`启用反斜杠转义. (162认同)
  • 在MacOSX中,使用`\ x1B`而不是`\ e`.`\ 033`适用于所有平台. (136认同)
  • 就像msanford为tput所做的那样,这里是(ANSI-Rainbow)`for((i = 30; i <38; i ++)); do echo -e"\ 033 [0;"$ i"m Normal:(0; $ i);\033 [1;"$ i"m Light:(1; $ i)"; done` (17认同)
  • 对我不起作用 - 输出:`\ e [0; 31mHello Stackoverflow\e [0m` (10认同)
  • 在ant属性文件中,为esacpe使用unicode,例如red =\u001b [0; 31m (4认同)
  • 在我的系统上(bash on ubuntu)我发现,对于第一个数字,1表示粗体不亮,3和4表示斜体和下划线,5个闪烁,7也改变背景.我想知道这些地方是否有某种规格? (2认同)

Drew Noakes.. 885

您可以使用awesome tput命令(在Ignacio的答案中建议)为各种事物生成终端控制代码.


用法

tput稍后将讨论特定的子命令.

直接

tput作为一系列命令的一部分调用:

tput setaf 1; echo "this is red text"

如果文本仍然显示错误,请使用;而不是.&&tput

Shell变量

另一种选择是使用shell变量:

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         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

使用compiz摇摆不定的窗口,该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行开始的巨大表的列中.)

  • 很好的答案.这是最能帮助我的人.对于其他想知道我在想什么的人来说,`$()`是一个[命令替换](http://tldp.org/LDP/abs/html/commandsub.html).所有`tput af 1`都会生成颜色代码字符串,但代码不是可打印字符,因此单独输入`tput af 1`将产生一个空行输出. (11认同)
  • 注意:如果您使用CygWin并且没有tput install`ncurses` (5认同)
  • tput也可以在sed中解析,以便将其解析成清晰易读的多彩内容:https://gist.github.com/nickboldt/fab71da10bd5169ffdfa (3认同)

Shakiba Mosh.. 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

bash,hexoctal中的转义字符:

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

简短的例子:

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

bash异常:

如果您要在特殊的bash变量中使用这些代码

  • PS0
  • PS1
  • PS2(=这是用于提示)
  • PS4

你应该添加额外的转义字符,以便可以正确解释它们.如果没有添加额外的转义字符,它会起作用,但是当您Ctrl + r在历史记录中使用搜索时,您将遇到问题.

bash的例外规则

您应该\[在任何启动ANSI代码之前添加\],并在任何结束之后添加.
示例:
常规使用: \033[32mThis is in green\033[0m
PS0/1/2/4: \[\033[32m\]This is in green\[\033[m\]

\[用于一系列不可打印字符的开始
\]是用于一系列不可打印字符的结束

提示:要记住它,您可以先添加\[\]然后将ANSI代码放在它们之间:
- \[start-ANSI-code\]
-\[end-ANSI-code\]

颜色序列的类型:

  1. 3/4位
  2. 8位
  3. 24位

在深入了解这些颜色之前,您应该了解这些代码的4种模式:

色彩模式

它修改了颜色的样式而不是文本.例如,使颜色变亮或变暗.

  • 0 重启
  • 1; 比平时轻
  • 2; 比平时更暗

此模式不受广泛支持.它完全支持Gnome-Terminal.

2.文本模式

此模式用于修改文本样式而不是颜色.

  • 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.

3. foreground mode

This mode is for colorizing the foreground.

4. background mode

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                                            |                                                                                       |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|

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     |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|

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 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|

some screen-shots

foreground 8-bit summary in a .gif

foreground.gif

background 8-bit summary in a .gif

background.gif

color summary with their values

在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述

blinking on KDE-Terminal

KDE-闪烁

a simple C code that shows you more

cecho_screenshot

a more advanced tool that I developed to deal with these colors:
bline


color-mode shot

褪色正常亮

text mode shot

仅文本模式

combining is OK

结合

more shots


Tips and Tricks for Advanced Users and Programmers:

Can we use these codes in a programming language?

Yes, you can. I experienced in , , , ,

Are they slow down the speed of a program?

I think, NO.

Can we use these on Windows?

3/4-bit Yes, if you compile the code with gcc
some screen-shots on Win-7

How to calculate the length of code?

\033[ = 2, other parts 1

Where can we use these codes?

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;

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;

PCC

It does NOT handle Unicode.

Do these codes only do colorizing?

No, they can do a lot of interesting things. Try:

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

or:

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

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

Are they available in Unicode?

Yes. \u001b

Which version of these colors is preferable?

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 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 #FF0000 means and here it is: 255;0;0
in #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
一些我不记得的博客/网页

徽章:

  • 没有人真的对这个答案感到惊讶吗? (41认同)
  • 这绝对是名人堂的答案,谢谢。 (9认同)
  • @Benj您好Benj。人们对我有很多评论。但是每次像** Cody Gray **这样的人或其他主持人清理所有内容时。我不知道为什么。他们甚至在不通知我的情况下修改和处理答案:( (2认同)
  • @NeilGuyLindberg **没有八进制文字**此错误是Node.js的一部分,而不是eslist本身。您可以使用x1B [消除它。 (2认同)
  • 我向后滚动很远,以支持这个答案! (2认同)

Ignacio Vazq.. 178

使用tputsetaf能力的参数1.

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

  • 用简单的循环探索颜色(增加`i`的上限以获得更多阴影):`for((i = 0; i <17; i ++)); 做回声"$(tput setaf $ i)这是($ i)$(tput sgr0)"; done` (42认同)
  • 这应该是最好的选择._tput_的作用是它将读取终端信息并为您呈现正确转义的ANSI代码.像`\ 033 [31m`这样的代码会破坏某些终端中的_readline_库. (7认同)

neocanable.. 116

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

[31m控件的文本颜色:

  • 30- 37设置前景色的颜色
  • 40- 47设置背景颜色

可以在此处找到更完整的颜色代码列表.

最好将文本颜色重置回\033[0m字符串的末尾.

  • echo -e"\ 033 [31m Hello World",[31m是颜色 (2认同)

Jorge Bucara.. 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}"

简单的色彩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!"


Andrew Nagui.. 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"
}

您可以将其称为:

cecho "RED" "Helloworld"


Alireza Miri.. 28

一种改变颜色的简洁方法echo是定义这样的功能:

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

用法:

coloredEcho "This text is green" green

或者您可以直接使用Drew的答案中提到的颜色代码:

coloredEcho "This text is green" 2


Wilfred Hugh.. 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"


Ahmed Masud.. 18

这个问题一遍又一遍地回答:-)但为什么不呢.

首先使用tput在现代环境中比手动注入ASCII代码更容易携带echo -E

这是一个快速bash功能:

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

现在你可以使用:

 say @b@green[[Success]] 

要得到:

大胆的绿色成功

关于可移植性的说明 tput

第一次tput(1)源代码于1986年9月上传

tput(1) 已经在20世纪90年代的X/Open curses语义中可用(1997年标准具有下面提到的语义).

所以,它(非常)无所不在.

  • tput是符合标准的方式,它完全独立于您了解终端功能.如果终端不支持给定的功能,它将优雅地降级到它能做的任何事情,而不会推出棘手的转义码. (3认同)
  • @Resandro - 那是因为你在`$ PS1`中使用它而没有`\ [... \]`围绕非间距部分?继续使用带有tput字符串的Bash PS1标记. (2认同)

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

结果

在此输入图像描述

希望这张图片可以帮助你为你的bash挑选颜色:D


Eric Leschin.. 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"

这将以不同的颜色打印字母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

在此输入图像描述

  • 顺便说一下:这并不依赖于安装特定版本的ubuntu,而是使用PuTTY! (2认同)

Ooker.. 9

为了便于阅读

如果您想提高代码的可读性,可以echo首先使用字符串,然后使用sed以下方法添加颜色:

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

  • $'<something>'用于bash,而不是sed.它告诉bash将\ e作为转义序列处理,然后放入一个"转义"字符.通常你会看到更简单的形式,比如$'\ t'或$'\n'来获取一个标签或换行符传递给一个命令. (2认同)

NVRM.. 9

没有人注意到ANSI代码7 反转视频的有用性.

通过交换前景色和背景色,它可以在任何终端方案颜色,黑色或白色背景或其他幻想调色板上保持可读性.

例如,对于无处不在的红色背景:

 ESC[38;2;?r?;?g?;?b?m  /*Foreground color*/
 ESC[48;2;?r?;?g?;?b?m  /*Background color*/

这是改变终端内置方案时的外观:

在此输入图像描述

这是用于gif的循环脚本.

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

请参阅https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters


小智.. 8

到目前为止,我最喜欢的答案是有色的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

xcol的例子

请注意,它接受sed将接受的任何正则表达式.

此工具使用以下定义

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

我在我的脚本中使用这些变量

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


Mahn.. 6

为了扩展这个答案,为了我们的懒惰:

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

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

  • 不要硬编码终端逃逸.使用`tput`; 这就是它的用途! (2认同)

小智.. 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'

然后使用它们以您需要的颜色进行打印:

printf "%s\n" "Text in ${red}red${end}, white and ${blu}blue${end}."


ArtBIT.. 5

绝对应该在原始ANSI控制序列上使用tput。

因为存在大量不同的终端控制语言,所以系统通常具有中间通信层。在数据库中查找当前检测到的终端类型的实际代码,然后向API发出标准请求,或者(从外壳程序)向命令发出标准请求。

这些命令之一是tputtput接受一组称为功能名称和任何参数(如果适用)的首字母缩写词,然后在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."

将给出以下结果:


Vishal.. 5

如果您使用的是zshbash

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'

在线尝试


归档时间:

查看次数:

922426 次

最近记录:

11 月,4 周 前