如何在Linux中更改echo的输出颜色
我正在尝试使用echo命令在终端中打印文本。
我想用红色打印文本。 我怎样才能做到这一点?
您可以使用这些ANSI转义码:
Black 0;30 Dark Gray 1;30
Red 0;31 Light Red 1;31
Green 0;32 Light Green 1;32
Brown/Orange 0;33 Yellow 1;33
Blue 0;34 Light Blue 1;34
Purple 0;35 Light Purple 1;35
Cyan 0;36 Light Cyan 1;36
Light Gray 0;37 White 1;37
然后在脚本中使用它们:
# .---------- constant part!
# vvvv vvvv-- the code from above
RED=' 33[0;31m'
NC=' 33[0m' # No Color
printf "I ${RED}love${NC} Stack Overflown"
用红色打印love
。
从@ james-lim的评论中,如果您使用的是echo
命令,请务必使用-e标志来允许反斜杠转义。
# Continued from above example
echo -e "I ${RED}love${NC} Stack Overflow"
(除非要添加额外的空行,否则在使用echo时不要添加"n"
)
你可以使用awesome tput
命令(在Ignacio的答案中建议)为各种事情生成终端控制代码。
用法
具体的tput
子命令将在后面讨论。
直接
调用tput
作为一系列命令的一部分:
tput setaf 1; echo "this is red text"
使用;
而不是&&
所以如果tput
错误文本仍显示。
壳变量
另一个选择是使用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 7nsetb 1" | tput -S # set fg white and bg red
也可以看看
man 1 tput
man 5 terminfo
。 (相应的tput
命令列在巨大表的Cap-name
列中,该行从第81行开始。) 您可以使用的一些变量:
# Reset
Color_Off=' 33[0m' # Text Reset
# Regular Colors
Black=' 33[0;30m' # Black
Red=' 33[0;31m' # Red
Green=' 33[0;32m' # Green
Yellow=' 33[0;33m' # Yellow
Blue=' 33[0;34m' # Blue
Purple=' 33[0;35m' # Purple
Cyan=' 33[0;36m' # Cyan
White=' 33[0;37m' # White
# Bold
BBlack=' 33[1;30m' # Black
BRed=' 33[1;31m' # Red
BGreen=' 33[1;32m' # Green
BYellow=' 33[1;33m' # Yellow
BBlue=' 33[1;34m' # Blue
BPurple=' 33[1;35m' # Purple
BCyan=' 33[1;36m' # Cyan
BWhite=' 33[1;37m' # White
# Underline
UBlack=' 33[4;30m' # Black
URed=' 33[4;31m' # Red
UGreen=' 33[4;32m' # Green
UYellow=' 33[4;33m' # Yellow
UBlue=' 33[4;34m' # Blue
UPurple=' 33[4;35m' # Purple
UCyan=' 33[4;36m' # Cyan
UWhite=' 33[4;37m' # White
# Background
On_Black=' 33[40m' # Black
On_Red=' 33[41m' # Red
On_Green=' 33[42m' # Green
On_Yellow=' 33[43m' # Yellow
On_Blue=' 33[44m' # Blue
On_Purple=' 33[45m' # Purple
On_Cyan=' 33[46m' # Cyan
On_White=' 33[47m' # White
# High Intensity
IBlack=' 33[0;90m' # Black
IRed=' 33[0;91m' # Red
IGreen=' 33[0;92m' # Green
IYellow=' 33[0;93m' # Yellow
IBlue=' 33[0;94m' # Blue
IPurple=' 33[0;95m' # Purple
ICyan=' 33[0;96m' # Cyan
IWhite=' 33[0;97m' # White
# Bold High Intensity
BIBlack=' 33[1;90m' # Black
BIRed=' 33[1;91m' # Red
BIGreen=' 33[1;92m' # Green
BIYellow=' 33[1;93m' # Yellow
BIBlue=' 33[1;94m' # Blue
BIPurple=' 33[1;95m' # Purple
BICyan=' 33[1;96m' # Cyan
BIWhite=' 33[1;97m' # White
# High Intensity backgrounds
On_IBlack=' 33[0;100m' # Black
On_IRed=' 33[0;101m' # Red
On_IGreen=' 33[0;102m' # Green
On_IYellow=' 33[0;103m' # Yellow
On_IBlue=' 33[0;104m' # Blue
On_IPurple=' 33[0;105m' # Purple
On_ICyan=' 33[0;106m' # Cyan
On_IWhite=' 33[0;107m' # White
分别为bash , hex和octal的转义字符:
| | bash | hex | octal | NOTE |
|-------+-------+--------+---------+------------------------------|
| start | e | x1b | 33 | |
| start | E | x1B | - | x cannot be capital |
| end | e[0m | x1m0m | 33[0m | |
| end | e[m | x1b[m | 33[m | 0 is appended if you omit it |
| | | | | |
简短的例子:
| color | bash | hex | octal | NOTE |
|-------------+--------------+----------------+----------------+---------------------------------------|
| start green | e[32m<text> | x1b[32m<text> | 33[32m<text> | m is NOT optional |
| reset | <text>e[0m | <text>1xb[0m | <text>