端末が「\033[2J\033[H」」を理解しているかどうかはどうすればわかりますか?

端末が「\033[2J\033[H」」を理解しているかどうかはどうすればわかりますか?

画面を消したいのですが、できれば可能です。ほとんどの端末では、エスケープシーケンスを介してこれを実行できます\033[2J\033[H。しかし、すべての端末がこれを理解しているわけではありません。端末がこのシーケンスを理解しているかどうかはどうすればわかりますか?

ベストアンサー1

これがtermcapまたはterminfoデータベースの目的です。

tput clear

clearこれらのデータベースは、名前が格納されている端末または端末エミュレータの機能の正しいエスケープシーケンスを検索します$TERM

tput標準コマンドですしかし、標準は幸いにも、ここに1を含む最小限の関数名を除いて関数名を指定しませんclear

ほとんどのシステムには、clear同じ操作を実行する標準コマンドでなくてもコマンドがあります。

シェルには、組み込み関数をtcsh使用してデータベースクエリをサポートする機能が組み込まれています。ここで、その関数の名前は次のとおりです。termcapechotccl

echotc cl

シェルにはterminfoもzshあります(両方ともモジュールにあり、実行/アクセス時に自動的にロードされます)。echotcechotizsh/terminfoechotcechoti$terminfo

echoti clear

ここで、$terminfo連想配列は関数を対応するエスケープシーケンスにマッピングします(引数を持たない関数にのみ役立ちます)、次のこともできます。

print -rn -- $terminfo[clear]

他のほとんどの言語(シェルでない場合)には、これらのデータベースへのインタフェースがあります(C、Perl、およびPythonのlibtinfoとより高いTerm::Capレベルのncursesを参照)。Cursescursesnotcurses

バラよりman 5 terminfoterminfo データベースの詳細情報そここのデータベースのHTMLソースは、次のように保持されます。@トーマスディキ(彼はncursesとxtermや他の多くの端末関連アプリケーションも管理しています。)コメントでは、さまざまな端末または端末エミュレータでサポートされている機能の歴史に関する多くの有用な情報を提供しています。


1ローカル環境でのみ可能なので、厳密に言えば、POSIXlyはどこでも必要になるとは思わないがPOSIX必要です。LC_ALL=POSIX tput clear

おすすめ記事