我正在尝试使用echo命令在终端中打印文本。
我想用红色打印文本。我该怎么做?
我正在尝试使用echo命令在终端中打印文本。
我想用红色打印文本。我该怎么做?
当前回答
这是我过去看到的所有组合,并决定哪一个读起来很酷:
for (( i = 0; i < 8; i++ )); do
for (( j = 0; j < 8; j++ )); do
printf "$(tput setab $i)$(tput setaf $j)(b=$i, f=$j)$(tput sgr0)\n"
done
done
其他回答
我写了swag就是为了实现这一点。
你可以这样做
pip install swag
现在,您可以通过以下方式将所有转义命令作为txt文件安装到给定目标:
swag install -d <colorsdir>
或者更容易通过:
swag install
这将把颜色安装到~/.colors。
您可以这样使用它们:
echo $(cat ~/.colors/blue.txt) This will be blue
或者这样,我觉得更有趣:
swag print -c red -t underline "I will turn red and be underlined"
在ascinema上查看!
以下是我最终使用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'"/"
打印方式如下:
您可以使用很棒的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 "$(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命令列在从第81行开始的巨大表的Cap-name列中。)
我们可以为文本和背景使用24位RGB真彩色!
ESC[38;2;⟨r⟩;⟨g⟩;⟨b⟩m /*Foreground color*/
ESC[48;2;⟨r⟩;⟨g⟩;⟨b⟩m /*Background color*/
红色文本和结束标记示例:
echo -e "\e[38;2;255;0;0mHello world\e[0m"
发电机:text.addEventListener(“输入”,更新)back.addEventListener(“输入”,更新)函数更新(){让a=text.value.substr(1).match(/.{1,2}/g)设b=back.value.substr(1).match(/.{1,2}/g)out1.textContent=“echo-e\”\\“+`033[38;2;${parseInt(a[0],16)};${parseInt(a[1],16)};${parseInt(a[2],16)}mHello\”`out2.textContent=“echo-e\”\\“+`033[48;2;${parseInt(b[0],16)};${parseInt(b[1],16)};${parseInt(b[2],16)}mWorld!\”`}div{padding:1rem;字体大小:更大}文本颜色:<input type=“COLOR”id=“TEXT”value=“#22333”><br><div id=“out1”></div>BACK COLOR:<input type=“COLOR”id=“BACK”value=“#FFFF00”><br><div id=“out2”>
24位:作为具有16至24位颜色的“真彩色”图形卡Xterm、KDE的Konsole以及所有libvte都变得很常见基于的终端(包括GNOME终端)支持24位前景色和背景色设置https://en.wikipedia.org/wiki/ANSI_escape_code#24-钻头,钻头
在我的脚本中使用它安全吗?
对8位和16位终端将只显示可用调色板范围内的回退颜色,保持最佳对比度,无破损!
此外,没有人注意到ANSI代码7反转视频的有用性。
通过交换前景和背景颜色,它可以在任何终端方案颜色、黑色或白色背景或其他幻想调色板上保持可读性。
例如,对于随处可见的红色背景:
echo -e "\033[31;7mHello world\e[0m";
这是更改终端内置方案时的外观:
这是用于gif的循环脚本。
for i in {30..49};do echo -e "\033[$i;7mReversed color code $i\e[0m Hello world!";done
看见https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Redition)_参数
这是最简单、易读的解决方案。与bashj(https://sourceforge.net/projects/bashj/),您只需选择以下行之一:
#!/usr/bin/bash
W="Hello world!"
echo $W
R=130
G=60
B=190
echo u.colored($R,$G,$B,$W)
echo u.colored(255,127,0,$W)
echo u.red($W)
echo u.bold($W)
echo u.italic($W)
Y=u.yellow($W)
echo $Y
echo u.bold($Y)
如果您的终端应用程序支持颜色,则可以使用256x256x256色。