更改终端文本和背景的颜色?

sig*_*jog 92 command-line color-management

我可以通过偏好更改颜色,但是如何通过命令行更改终端的背景颜色和文本颜色?

kos*_*kos 67

在某些 XTerm/ANSI 兼容终端(如xtermgnome-terminal)上,您可以使用比默认 8/16 色调色板更大的调色板设置颜色(例如使用 88 色、256 色或 16777216 色 (RGB) 调色板) ;既有xtermgnome-terminal支持256颜色和16777216-颜色(RGB)调色板)两者; 请注意,shell 可能会覆盖它(例如 for 就是这种情况zsh)。

这是一个脚本,用于在支持 256 调色板的 XTerm/ANSI 兼容终端中列出 256 调色板中的颜色及其 ANSI 颜色代码:

#!/bin/bash
for((i=16; i<256; i++)); do
    printf "\e[48;5;${i}m%03d" $i;
    printf '\e[0m';
    [ ! $((($i - 15) % 6)) -eq 0 ] && printf ' ' || printf '\n'
done
Run Code Online (Sandbox Code Playgroud)

截图1

截屏

根据您是要将颜色应用到前景还是背景,请在以下命令中使用或(分别)的<fg_bg>值:3848

printf '\e[<fg_bg>;5;<ANSI_color_code>m'
Run Code Online (Sandbox Code Playgroud)

例如,要将前景色 ( <fg_bg>= 38) 设置为红色 ( <ANSI_color_code>= 196),将背景色 ( <fg_bg>= 48) 设置为黑色 ( <ANSI_color_code>= 0):

printf '\e[38;5;196m Foreground color: red\n'
printf '\e[48;5;0m Background color: black\n'
Run Code Online (Sandbox Code Playgroud)

截图3

有必要使用重新绘制提示printf '\e[K',以便将背景颜色应用于整行,并将前景色应用于光标:

截图4

在兼容终端中使用 RGB 值而不是 ANSI 颜色代码可以完成同样的事情;根据您是要将颜色应用到前景还是背景,请在以下命令中使用或(分别)的<fg_bg>值:3848

printf '\e[<fg_bg>;2;<R>;<G>;<B>m'
Run Code Online (Sandbox Code Playgroud)

例如,要将前景色 ( <fg_bg>= 38) 设置为红色 ( <R>= 255, <G>= 0, <B>= 0) 并将背景色 ( <fg_bg>= 48) 设置为黑色 ( <R>= 0, <G>= 0, <B>= 0):

printf '\e[38;2;255;0;0m Foreground color: red\n'
printf '\e[48;2;0;0;0m Background color: black\n'
Run Code Online (Sandbox Code Playgroud)

截图5

同样,有必要重新绘制提示printf '\e[K',以便将背景颜色应用于整行,并将前景色应用于光标:

截图6

使用任一方法,您都可以使用printf '\e[0m'重置所有属性:

截图7

  • `xterm` 和 `gnome-terminal` 都识别 \e[38/48;2;R;G;Bm 真彩色转义序列;然而,“xterm”将实际颜色舍入到其 256 色调色板中最接近的颜色。`gnome-terminal` 显示转义序列中给出的确切真实颜色。 (2认同)
  • \e[K 是危险的;在某些模拟器(例如`xterm`)中,如果光标恰好位于最右边(视觉上显示在最右边的列中,但逻辑上已经超出了,因为最右边的列中已经打印了一个字符),最后一个字母被剥离. 参见例如 https://bugzilla.gnome.org/show_bug.cgi?id=740789 或 http://savannah.gnu.org/bugs/?36831。 (2认同)

Agi*_*ief 44

此页面上找到的信息,不包括预览栏:

序列由转义字符(通常由“ ^[”或“ <Esc>”表示)后跟一些其他字符组成:“ ^[FCm”(其中FC是下面项目符号列表中的数字之一)。

在 中bashEsc代码可以是以下之一:

  1. \e
  2. \033 (八进制)
  3. \x1B (十六进制)

注 1:\e[0m”序列删除所有属性(格式和颜色)。在每个彩色文本的末尾添加它可能是一个好主意。

注 2:前景色和背景色可能会有所不同,具体取决于终端的配置,并非所有颜色都受支持

设置/重置

  • 0:重置/删除所有修饰符、前景和背景属性: echo -e "\e[0mNormal Text"
  • 1:大胆/明亮: echo -e "Normal \e[1mBold"
  • 2:昏暗: echo -e "Normal \e[2mDim"
  • 4: 下划线: echo -e "Normal \e[4mUnderlined"
  • 5:闪烁(在除 XTerm 之外的大多数终端中不起作用): echo -e "Normal \e[5mBlink"
  • 7:反转/反转: echo -e "Normal \e[7minverted"
  • 8:隐藏(用于敏感信息): echo -e "Normal \e[8mHidden Input"
  • 21:重置/删除粗体/亮色: echo -e "Normal \e[1mBold \e[21mNormal"
  • 22:重置/删除暗淡: echo -e "Normal \e[2mDim \e[22mNormal"
  • 24:重置/删除下划线: echo -e "Normal \e[4mUnderlined \e[24mNormal"
  • 25:重置/删除闪烁: echo -e "Normal \e[5mBlink \e[25mNormal"
  • 27:重置/删除反向/反转: echo -e "Normal \e[7minverted \e[27mNormal"
  • 28:重置/删除隐藏: echo -e "Normal \e[8mHidden \e[28mNormal"

前景

  • 39:默认(通常为绿色、白色或浅灰色): echo -e "Default \e[39mDefault"
  • 30:黑色:echo -e "Default \e[30mBlack"(最好具有背景颜色组合: echo -e "Default \e[30;107mBlack on white"
  • 31: 红色(绿色背景请勿使用)
  • 32: 绿
  • 33: 黄色
  • 34: 蓝色
  • 35:洋红色/紫色
  • 36: 青色
  • 37: 浅灰
  • 90: 深灰色
  • 91: 红灯
  • 92: 浅绿色
  • 93: 浅黄色
  • 94: 浅蓝
  • 95:浅品红色/粉红色
  • 96: 浅青色
  • 97: 白色的

背景

  • 49:默认背景颜色(通常为黑色或蓝色)
  • 40: 黑色的
  • 41: 红色的
  • 42: 绿
  • 43: 黄色
  • 44: 蓝色
  • 45:洋红色/紫色
  • 46: 青色
  • 47:浅灰色(不要与白色前景一起使用)
  • 100:深灰色(不要与黑色前景一起使用)
  • 101: 红灯
  • 102:浅绿色(不要与白色前景一起使用)
  • 103:浅黄色(不要用白色前景)
  • 104:浅蓝色(不要用浅黄色前景)
  • 105:浅品红色/粉红色(不要用于浅色前景)
  • 106:浅青色(不要与白色前景一起使用)
  • 107:白色(不要用于浅色前景)

要同时设置前景色和背景色,请使用 form echo -e "\e[S;FG;BGm"。例如:(echo -e "\e[1;97;41m"红色背景上的粗体白色前景)

有关 256 色选项,请参阅源页面。


Jac*_*ijm 31

偶然改变颜色

如果它是为了偶然改变颜色

您可以使用setterm命令:

setterm -term linux -back <background_colour> -fore <text_color> -clear
Run Code Online (Sandbox Code Playgroud)

从颜色中,您可以选择(前景色和背景色):

black|blue|green|cyan|red|magenta|yellow|white|default
Run Code Online (Sandbox Code Playgroud)

更多选择:

setterm -help
Run Code Online (Sandbox Code Playgroud)

更改您的个人资料(颜色)设置

在 14.04 中,我没有找到dconf用于设置颜色或终端的选项。但是,您可以使用gconftool

或者,要设置颜色的名称,您可以简单地从与 setterm 命令相同的调色板中使用whitegreen,例如:

gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/background_color" --type string black
Run Code Online (Sandbox Code Playgroud)


mur*_*uru 5

用于获取彩色输出的各种颜色代码也可用于获取彩色背景

40  black
41  red
42  green
43  yellow
44  blue
45  magenta
46  cyan
47  white
Run Code Online (Sandbox Code Playgroud)

因此,以下命令将我的背景变为红色:

$ echo -e '\e[0;41m'
Run Code Online (Sandbox Code Playgroud)

根据外壳、终端模拟器等,您可能不需要-e.


egm*_*ont 5

有关将前景或背景切换到调色板的特定颜色,甚至某些终端中的直接 RGB 颜色,请参阅 kos 的答案。这种序列的效果持续到选择了不同的颜色(或恢复为默认颜色)。

某些终端模拟器支持的另一种方法是使用 OSC 10 / 11 转义序列重新定义终端默认前景色和背景色的确切 RGB 值:

echo -ne '\e]10;#123456\e\\'  # set default foreground to #123456
echo -ne '\e]11;#abcdef\e\\'  # set default background to #abcdef
Run Code Online (Sandbox Code Playgroud)

这可能会持续更长时间(直到被另一个 OSC 10 / 11 覆盖或通过 OSC 110 / 111 重置),但与 dconf 方法不同,这仍然只影响当前终端。