Gnome-Terminal

為什麼 xterm 顯示 256 色(不是 xterm-256color)?

  • June 20, 2015

有人可以解釋一下嗎?我正在使用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

TERM環境變數是您作為使用者可以告訴程序(例如emacsgrep、和需要發布才能訪問它們。之所以存在,是因為軟體通常很難自行確定這一點(當使用者通過外部終端與電腦互動時幾乎不可能,並且僅通過數據線連接到電腦)。less``ls``vim

gnome-terminal是向使用者提供類終端服務的程序,是使用者在終端中執行的程序。  gnome-terminal可能知道在呼叫它之前在DISPLAY環境中設置的環境變數(這是一個明顯的例子),但它不知道在其下執行的程序中設置的環境變數。

所以,gnome-terminal擁有它擁有的任何能力。可以在外部調整/限制這些,例如,通過命令行選項、預先存在的環境、配置文件和視窗框架中的對話框,但不能通過TERM在視窗中的外殼中進行更改。如果它能夠顯示 256 種顏色,那麼它就能夠顯示 256 種顏色,您可以通過向其發送適當的轉義序列來使其這樣做。但是,只要您TERM設置為xterm,您執行的程序就會相信您是在告訴它們它們正在執行在具有八種顏色功能的終端中, 因此它們會將它們的請求(轉義序列)限制為這些功能。您需要設置TERMxterm-256color,而不是啟用gnome-terminal顯示 256 種顏色,但要告訴程序喜歡grepls要求它使用 8 種以上的顏色。

引用自:https://unix.stackexchange.com/questions/205270