xtermが256色(xterm-256colorではない)を表示するのはなぜですか?

xtermが256色(xterm-256colorではない)を表示するのはなぜですか?

誰かがこれを説明できますか?私はそれを使用しています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ユーザーがプログラム(例えば、、、、およびemacsgrepless実行している端末の種類を知らせる方法です。lsvimエスケープシーケンスアクセスするには展開が必要です。この状況は、通常、ソフトウェアがそれを自分で判断するのが難しいために発生します(ユーザー端末外部にあり、データケーブルを介してのみコンピュータに接続されます。

gnome-terminalユーザーに端末などのサービスを提供するプログラムと、ユーザーが端末で実行するプログラムを指します。  gnome-terminalおそらく環境変数のセットを知っているでしょう。それ環境が呼び出される前(DISPLAYこれは明らかな例です)、その環境で実行されるプロセスに設定された環境変数についてはまったくわかりません。

したがって、gnome-terminalあなたができる能力が何であれ、あなたは持っています。これは、コマンドラインオプション、既存の環境、設定ファイル、ウィンドウフレームのダイアログボックスなどを介して外部で調整/制限できますが、ウィンドウTERM内のシェルでは変更できません。 256色を表示できる場合は、256色を表示でき、適切なエスケープシーケンスを送信して表示できます。しかし、あなたが実行しているプログラムは、8つの色をサポートする端末で実行されているTERMxterm思います。 したがって、要求(エスケープシーケンス)を次の機能に制限します。。 256色表示を有効にするのではなく、プログラムに次のことを通知するには、にTERM設定する必要があります。xterm-256colorgnome-terminalgrepls尋ねる8つ以上の色を使用してください。

関連情報