笔记:我重新设计了这个问题以澄清问题。这是一个琐碎的问题,可以分为几个部分来回答,因为该问题有多个属性。
不幸的是,当提问者理解(知道)答案的某些部分以及问题的结构时,问题可能会被修改。
因此,这个问题是从与原来不同的角度提出的。
如何使用 shell 实用程序更改 Linux 控制台的颜色设置? 如何使用 shell 实用程序更改终端仿真器的颜色设置?
本来,我想在执行shell脚本期间更改Linux控制台的背景颜色。以下提议如我所愿。
#!/bin/sh
# set the background color of the terminal
tput setab 6
clear
printf "%s\n" 'background: cyan'
# do some tasks
cd /usr/src/initramfs
pwd
ls -l
# the background of the shell output is cyan
尽管如此,有人可能会遇到一些故障(或困难)。
例如,如果未清除屏幕,则在 shell 脚本执行期间,背景颜色仅应用于文本输出。如果使用命令tput setab 6
行提交命令并且未清除屏幕,则背景颜色仅应用于输出文本的一小部分。如果在命令行上提交命令tput setab 6
并且清除屏幕,则背景颜色将应用于全屏,但只会持续到提交另一个命令为止。 [...]
1背景颜色
答案1
在 Linux 虚拟终端(“控制台”)上:
要将背景设置为颜色 1(红色):
printf %b '\e[41m' '\e[8]' '\e[H\e[J'
第一个转义 ( setab
) 将背景设置为颜色 1,第二个转义将当前前景-背景对定义为默认,第三个 ( clear
) 清除屏幕。
从现在开始,“红色”将成为默认背景:
printf %b 'World\e[42mWide\e[mWeb\n'
setab 2
请注意,使用( )将背景设置为绿色以及随后使用( )\e[42
清除属性不会擦除我们的设置。sgr0
\e[m
或者,您可以通过“set Palette”(又名initc
=“initialize_color”)转义重新定义颜色 0(默认背景,黑色)的含义:
printf %b '\e[40m' '\e[8]' # set default background to color 0 (black)
printf %b '\e]P0ff0000' # redefine color 0 as 'red'
后者采用 形式的参数nRRGGBB
,其中n
是颜色编号,RRGGBB
是定义颜色的十六进制三元组。
这种逃脱也得到了支持油灰。
有关这些函数及其他函数的说明,请查看 console_codes(4) 和 terminfo(5) 联机帮助页。
我也无法:
a) 更改屏幕的背景颜色,而不用擦除屏幕上的所有内容clear
。
b) 强制它更新屏幕的非字符边距,而无需使用 Control-Alt-Fn 在虚拟终端之间来回切换。
在类似 xterm 的终端模拟器上:
这会将背景设置为浅绿色没有必须清除屏幕:
printf %b '\e]11;#ccffcc\a'
它也适用于mlterm
、rxvt
、等gnome-terminal
。konsole
另一种形式\e]11;rgb:cc/ff/cc\a
(取自这里)不支持konsole
(使用 12.16.0 版本进行测试)。
这会不是tmux
在或内工作screen
。
所有的xterm
越狱事件都被记录在案ctlseqs.txt来自其源代码的文件。
笔记:
一些转义符(例如\e[8]
或\e]11;...\a
)不包含在 terminfo 中,tput
根本无法使用,而其他转义符(例如initc
)则太尴尬而无法以干净的方式使用。
terminfo 数据库的 grepable 版本可以通过如下命令获得:find /usr/share/terminfo -type f -printf '%f\n' | xargs -n1 infocmp -0 -A /usr/share/terminfo