How to change the output color of echo in Linux
我正在尝试使用echo命令在终端中打印文本。
我想用红色打印文本。我该怎么做?
您可以使用这些ANSI转义码:
1 2 3 4 5 6 7 8 | 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 |
然后在脚本中这样使用它们:
1 2 3 4 5 6 | # .---------- constant part! # vvvv vvvv-- the code from above RED='\033[0;31m' NC='\033[0m' # No Color printf"I ${RED}love${NC} Stack Overflow " |
它以红色打印
在@james lim的评论中,如果您使用
1 2 | # Continued from above example echo -e"I ${RED}love${NC} Stack Overflow" |
(使用echo时不要添加
"
您可以使用令人敬畏的
后面将讨论特定的
调用
1 | tput setaf 1; echo"this is red text" |
使用
另一种选择是使用shell变量:
1 2 3 4 | red=`tput setaf 1` green=`tput setaf 2` reset=`tput sgr0` echo"${red}red text ${green}green text${reset}" |
使用命令替换将
1 | echo"$(tput setaf 1)Red text $(tput setab 7)and white background$(tput sgr 0)" |
例子
上面的命令在Ubuntu上生成:
前景色和背景色命令1 2 | tput setab [1-7] # Set the background colour using ANSI escape tput setaf [1-7] # Set the foreground colour using ANSI escape |
颜色如下:
1 2 3 4 5 6 7 8 9 10 | 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版本的颜色设置功能(
1 2 3 4 5 6 7 | 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 |
光标移动命令
1 2 3 4 5 6 7 8 9 | 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 |
清除和插入命令
1 2 3 4 5 6 7 | 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 |
其他命令
1 2 | tput sgr0 # Reset text format to the terminal's default tput bel # Play a bell |
在compiz摇摆不定的窗口中,
通过回显多行字符串并通过管道传输来避免临时文件:
1 2 | echo -e"setf 7 setb 1" | tput -S # set fg white and bg red |
也见
- 见
man 1 tput 。 - 有关命令的完整列表和这些选项的更多详细信息,请参阅
man 5 terminfo 。(对应的tput 命令列在从第81行开始的大表的Cap-name 列中。)
您可以使用的一些变量:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | # 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中的转义符分别为:
1 2 3 4 5 6 7 | | | 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 | | | | | | | |
简短的例子:
1 2 3 4 5 | | 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
您应该添加额外的转义字符,以便bash能够正确地解释它们。如果不添加额外的转义字符,它会起作用,但在历史记录中使用
您应该在任何开始的ANSI代码之前添加
提示:要记住它,您可以先添加
在潜入这些颜色之前,您应该知道使用这些代码的4种模式:好的。1。色彩模式
它修改了颜色而不是文本的样式。例如,使颜色变亮或变暗。好的。
0 复位1; 比正常轻2; 比正常颜色深
这种模式不受广泛支持。它完全支持GNOME终端。好的。2。文本模式
此模式用于修改文本样式而不是颜色。好的。
3; 斜体4; 下划线5; 闪烁(慢)6; 闪烁(快速)7; 反向8; 皮9; 划出
几乎得到了支持。例如,kde konsole支持
此模式用于为前景着色。好的。4。背景模式
此模式用于为背景着色。好的。
好的。
下表显示了ANSI颜色的3/4位版本的摘要好的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | |------------+----------+---------+-------+------------------+------------------------------+--------------------------------------| | 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 | | |------------+----------+---------+-------+------------------+------------------------------+--------------------------------------| |
好的。
下表显示了8位版本的ANSI颜色的摘要好的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------| | 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位快速测试:
好的。
下表显示了24位版本的ANSI颜色的摘要好的。
1 2 3 4 5 6 7 8 9 10 11 12 13 | |------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------| | 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 | |------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------| |
好的。一些屏幕截图
好的。
好的。颜色摘要及其值
好的。KDE终端上的
好的。
是一个简单的
好的。
是我为处理这些颜色而开发的一个更高级的工具:好的。彩色模式镜头
好的。文本模式镜头
好的。合并可以
好的。更多镜头
好的。高级用户和程序员的提示和技巧:我们能用编程语言使用这些代码吗?
是的,你可以。我在BASH、C、C++、D Perl、Python中有经验。好的。他们会减慢程序的速度吗?
我想,NO.好的。我们能在窗户上用这些吗?
3/4位是的,如果用
任何有
1 2 | #!/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; |
将此代码存储在一个文件名中:
在
1 2 3 | [user2:db2] pager pcc PAGER set to 'pcc' [user2:db2] select * from table-name; |
它不处理Unicode。
这些码的colorizing只读的?
在他们可以的,很多有趣的事情。试试:
1 | echo -e '\033[2K' # clear the screen and do not move the position |
或:
1 | echo -e '\033[2J\033[u' # clear the screen and reset the position |
有很多初学者,想清除你的屏幕与
他们是可在Unicode?
是的。
这是可取的版本,这些颜色吗?
这是一个容易使用的,但它是非常准确的
参考:维基百科ANSI排气序列tldp.orgtldp.orgmisc.flogisoft.com一些博客/网站,我不记得
好的。
使用具有
1 | echo"$(tput setaf 1)Hello, world$(tput sgr0)" |
1 | echo -e"\033[31m Hello World" |
30 -37 设置前景颜色40 -47 设置背景色
这里可以找到更完整的颜色代码列表。
在字符串末尾,最好将文本颜色重置回
这是颜色开关
色码有:
我们用颜色开关
1 2 3 4 | SWITCH="\033[" NORMAL="${SWITCH}0m" YELLOW="${SWITCH}1;33m" echo"${YELLOW}hello, yellow${NORMAL}" |
单色
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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!" |
仅为一个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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; } |
用途:
1 | coloredEcho"This text is green" green |
或者直接使用德鲁答案中提到的颜色代码:
1 | coloredEcho"This text is green" 2 |
使用
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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" |
这个问题一次又一次地被回答了:(-)但为什么不呢。
首先使用
下面是一个快速的bash函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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" } |
现在您可以使用:
1 | say @b@green[[Success]] |
得到:
关于1986年9月首次上传
所以,它无处不在。
我刚刚将所有解决方案中的好捕获物合并到一起,结果是:
1 2 3 4 5 6 7 8 9 10 | 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} " } |
你可以称之为:
1 | cecho"RED""Helloworld" |
感谢@K-5的回答
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | 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 |
结果
希望这张图片能帮你挑选适合你的颜色。
这些代码适用于我的Ubuntu设备:
1 2 3 4 5 6 7 8 9 10 11 | 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" |
这将以不同颜色打印字母A B C D:
1 | echo -e"\x1B[0;93m a \x1B[0m b \x1B[0;92m c \x1B[0;93m d \x1B[0;94m" |
for循环:
1 2 3 | for (( i = 0; i < 17; i++ )); do echo"$(tput setaf $i)This is ($i) $(tput sgr0)"; done |
可读性
如果要提高代码的可读性,可以先使用
1 | echo 'Hello World!' | sed $'s/World/\e[1m&\e[0m/' |
到目前为止,我最喜欢的答案是Coloredecho。
为了发布另一个选项,您可以查看这个小工具xcol
例如,您可以像grep一样使用它,它会为每个参数的stdin着色不同的颜色。
1 | sudo netstat -putan | xcol httpd sshd dnsmasq pulseaudio conky tor Telegram firefox"[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+"":[[:digit:]]+""tcp.""udp." LISTEN ESTABLISHED TIME_WAIT |
注意,它接受SED将接受的任何正则表达式。
此工具使用以下定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #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 |
我在脚本中使用这些变量,就像这样
1 | echo"${red}hello ${yellow}this is ${green}coloured${normal}" |
为了扩展这个答案,对于懒惰的我们:
1 2 3 4 5 6 7 8 9 | function echocolor() { # $1 = string COLOR='\033[1;33m' NC='\033[0m' printf"${COLOR}$1${NC} " } echo"This won't be colored" echocolor"This will be colorful" |
没有人注意到ansi代码7反向视频的有用性。
通过交换前景和背景色,它可以在任何终端方案颜色、黑白背景或其他幻想调色板上保持可读性。
例如,对于适用于所有地方的红色背景:
1 | echo -e"\033[31;7mHello world\e[0m"; |
这是更改终端内置方案时的外观:
这是用于GIF的循环脚本。
1 | 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_u(select_graphic_rendition)_参数
您绝对应该在原始的ANSI控制序列上使用tput。
Because there's a large number of different terminal control
languages, usually a system has an intermediate communication layer.
The real codes are looked up in a database for the currently detected
terminal type and you give standardized requests to an API or (from
the shell) to a command.One of these commands is
tput .tput accepts a set of acronyms called
capability names and any parameters, if appropriate, then looks up the
correct escape sequences for the detected terminal in the terminfo
database and prints the correct codes (the terminal hopefully
understands).
来自http://wiki.bash-hacker.org/scripting/terminalcodes
也就是说,我编写了一个名为bash tint的小助手库,它在tput上添加了另一个层,使其更易于使用(imho):
例子:
tint"white(Cyan(T)Magenta(I)Yellow(N)Black(T)) is bold(really) easy to use."
将得出以下结果:
我写了SWAG来实现这一点。
你可以做
1 | pip install swag |
现在,您可以通过以下方式将所有escape命令作为txt文件安装到给定的目标:
1 | swag install -d <colorsdir> |
或者更容易通过:
1 | swag install |
将颜色安装到
你可以这样使用它们:
1 | echo $(cat ~/.colors/blue.txt) This will be blue |
或者这样,我觉得更有趣的是:
1 | swag print -c red -t underline"I will turn red and be underlined" |
看看Asciinema!
这就是我以前看到的所有组合,并决定哪个读起来很酷:
1 2 3 4 5 6 | 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) " done done |
这是一个简单的小脚本,我最近把它放在一起,它会上色。任何管道输入,而不是使用"厕所"。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #!/usr/bin/env bash ## A.M.Danischewski 2015+(c) Free - for (all (uses and ## modifications)) - except you must keep this notice intact. declare INPUT_TXT="" declare ADD_LF=" " declare -i DONE=0 declare -r COLOR_NUMBER="${1:-247}" declare -r ASCII_FG="\\033[38;05;" declare -r COLOR_OUT="${ASCII_FG}${COLOR_NUMBER}m" function show_colors() { ## perhaps will add bg 48 to first loop eventually for fgbg in 38; do for color in {0..256} ; do echo -en"\\033[${fgbg};5;${color}m ${color}\t\\033[0m"; (($((${color}+1))%10==0)) && echo; done; echo; done } if [[ ! $# -eq 1 || ${1} =~ ^-. ]]; then show_colors echo" Usage: ${0##*/} <color fg>" echo" E.g. echo "Hello world!" | figlet | ${0##*/} 54" else while IFS= read -r PIPED_INPUT || { DONE=1; ADD_LF=""; }; do PIPED_INPUT=$(sed 's#\\#\\\\#g' <<<"${PIPED_INPUT}") INPUT_TXT="${INPUT_TXT}${PIPED_INPUT}${ADD_LF}" ((${DONE})) && break; done echo -en"${COLOR_OUT}${INPUT_TXT}\\033[00m" fi |
然后用红色(196)命名:
参考:
1 2 3 4 5 6 7 8 9 10 11 12 | echo_red(){ echo -e"\e[1;31m$1\e[0m" } echo_green(){ echo -e"\e[1;32m$1\e[0m" } echo_yellow(){ echo -e"\e[1;33m$1\e[0m" } echo_blue(){ echo -e"\e[1;34m$1\e[0m" } |
这里是最简单易读的解决方案。使用bashj(https://sourceforge.net/projects/bashj/),您只需选择以下行之一:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/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) |
如果您在终端应用程序中有颜色支持,则可以使用
就像外面的一些东西一样,通过grep会将其突出显示为红色(但只有红色)。也可以使用命名管道,使字符串更接近行尾:
1 | grep '.*' --color=always <(echo"foobar") |
1 2 3 | red='\e[0;31m' NC='\e[0m' # No Color echo -e"${red}Hello Stackoverflow${NC}" |
这个答案是正确的,除了对颜色的调用不应该在引号内。
1 | echo -e ${red}"Hello Stackoverflow"${NC} |
应该有技巧。