有人可以解释一下吗?我在用着gnome-terminal
。首先,一些信息:
# echo $TERM
xterm
# infocmp xterm
Reconstructed via infocmp from file: /lib/terminfo/x/xterm
colors#8, cols#80, it#8, lines#24, pairs#64
# tput colors
8
我编写了简单的脚本来创建扩展颜色集的代码:
# Output file (current directory) and text.
OFILE='xterm256_colors_test.sh'
OFILE_COLORS='terminal_256_colors'
OTEXT='Sed ut perspiciatis unde omnis iste natus error sit voluptatem...'
# Clearing the contents from previous runs.
if [ -e $OFILE ] || [ -e $OFILE_COLORS ]
then
> $OFILE
> $OFILE_COLORS
fi
# Bang!
echo -e '#!/bin/bash\n' | tee --append $OFILE $OFILE_COLORS &> /dev/null
echo -e "\necho -e \"" | tee --append $OFILE &> /dev/null
# \x1b is a control character changing behaviour of the shell.
# It is also the <Ctrl+V><Esc> sequence.
for i in {016..255}; do
echo -e "\x1b[38;5;${i}m $OTEXT $i \x1b[0m" >> $OFILE
echo -e "color${i}=\"\[\033[38;5;${i}m\]\"" >> $OFILE_COLORS
done
# End of echo.
echo '"' | tee --append $OFILE &> /dev/null
# The file should be executable.
chmod +x $OFILE
尽管使用基本的xterm
终端模拟器,但当我运行生成的脚本时,我可以看到所有 240 种颜色。为什么?我想我应该换成$TERM
第xterm-256color
一个。
答案1
环境TERM
变量是您(用户)可以告诉程序(例如,emacs
、grep
、less
、ls
和vim
)它们正在运行的终端类型的一种方式,因此它们会知道其参数,包括它具有哪些功能以及什么转义序列他们需要发行才能访问它们。之所以存在这种情况,是因为一般来说,软件很难自行确定这一点(当用户通过终端是外部的,仅通过数据线连接到计算机)。
gnome-terminal
是向用户提供类终端服务的程序以及用户在终端内运行的程序。
gnome-terminal
可能知道设置的环境变量它是环境,在它被调用之前(DISPLAY
这是一个明显的例子),但它不知道在其下运行的进程中设置的环境变量。
所以,gnome-terminal
有什么能力就有什么。可以在外部调整/约束这些,例如通过命令行选项、预先存在的环境、配置文件和窗口框架中的对话框,但不能通过TERM
在窗口中的外壳中进行更改。如果它能够显示 256 色,那么它就能够显示 256 色,并且您将能够通过向其发送适当的转义序列来使其这样做。但是,只要您设置TERM
为xterm
,您运行的程序就会相信您告诉它们它们正在支持八色的终端中运行,
因此他们会将他们的请求(转义序列)限制为这些功能。您需要设置TERM
为xterm-256color
,不是为了启用gnome-terminal
显示 256 色,而是告诉诸如grep
和ls
之类的程序问它使用8种以上的颜色。