web-dev-qa-db-ja.com

TERM変数は何を使用していますか?

このドキュメント によると:

環境変数TERMには、テキストウィンドウの機能の識別子が含まれています。 「man 5 terminfo」を参照として使用する「infocmp」コマンドを使用すると、これらの機能の詳細なリストを取得できます。

しかし、TERM変数は実際にどのように使用されますか?システムがxterm(Xウィンドウシステムのターミナルエミュレーター)を実行するとします。 xtermTERM変数を使用していますか、それともシェルですか?もしそうなら、どうですか? xtermTERMに設定されている場合、linuxは機能しなくなりますか?

また、TERMをデフォルト値のxterm-256colorからxtermのようなものに変更しても、カラー出力が無効にならないのはなぜですか?

4
Shuzheng

TERM変数は、ターミナルで実行されているプログラムによって使用されます。これは、プログラムが出力を処理している端末(またはエミュレーター)の機能を判別できるようにするためのものです。 the ncurses manpage に記載されています。

xtermなどのエミュレータを含む端末自体は、TERMの値を気にしないで、設定するだけです(エミュレータの場合、物理端末は設定できません)。特定の出力シーケンスを処理する方法を知っており、TERMやその他の内部状態を気にすることなく処理します。ターミナルの動作を変更せずに、TERMをシェルで好きなように設定したり、設定を解除したりすることもできます。まず、ターミナルはTERMが何に設定されているかを認識していません。

TERMを気にするプログラムは、通常、 ncurses などの気になる出力ライブラリを使用するプログラム、またはより基本的な形式 Termcap または Terminfo これには、BashやZshなどのシェルが含まれます。これらのシェルは、たとえば、行編集機能(履歴を上下に移動すると行を消去できる)にterminfoを使用します。これらは、TERMの値を機能のデータベースにマップします。これは、端末が特定のタスク(カーソルの移動、画面のクリア、色の変更など)を実行できるかどうか、およびその方法をプログラムまたはライブラリに通知します。 GNU grepなどの一部のプログラムは、チェックすることなく機能 を引き受けます。

TERMxterm-256colorからxtermに変更しても、それほど大きな変化はありません。特に、TERMを参照するプログラムのカラーサポートは無効になりません:xtermはカラー出力もサポートしています。違いは、サポートされる色の数です。

キーボード入力とテキスト出力はどのように機能するのですか?マニュアルページの色どの端末タイプを使用していますか?端末が使用するプロトコル/標準は何ですか? 詳細については。

9
Stephen Kitt

私はnCursesプログラム(およびlibtinfoプログラム)のlotがTERMに関心があると思います。

たとえば、htopは、TERM=xtermの場合に「部分的に上書きされた」行を表示することがよくありますが、TERM=xterm-colorの場合はすべて問題ありません。

私の経験から、libtinfoを使用しない(直接または間接的に、たとえばnCursesを介して)プログラムは、通常、TERMをまったく気にせず、色やカーソルの配置などのサポートを想定しています。

2
iBug