web-dev-qa-db-ja.com

コマンドラインから端末の色の機能を確認するにはどうすればよいですか?

私は書きます:

 $ infocmp -1 xterm 
 ... 
 colors#8、
 bold =\E [1m、
 flash =\E [5m 、
 ... 
 $ tput -Txterm color && echo OK || echo err 
 8 
 OK 
 $ tput -Txterm flash && echo OK || echo err 
 ^ [[5mOK 

したがって、tputを使用してretminal機能を確認できます。

この溶液は持ち運び可能ですか?他に解決策はありますか?

または私は解決策で立ち往生することができるかもしれません:

 $ [$ TERM = xterm] && echo ok || echo err 
 ok 

1つの使用法は、PS1を.bashrcに設定することです。 shスクリプトから注意を引くためのハイライト出力用のもう1つ。私はそのような解決策を使うことができます:

 PS1 = 'bash#' 
 case "$ TERM" in 
 xterm *)PS1 = '\ [\ 033 [35m \] bash#\ [\ 033 [0m\] '
 ;; 
 esac 

これはbashの組み込みコマンド(非常に効率的)のみを使用し、私のすべてのケースで機能しますが、残念ながら移植性はありません。

1
gavenkoa

tputの使用は、多数のオペレーティングシステムに移植可能です。

ただし、戻りコードを確認すると、プラットフォームのterminfoデータベースの「xterm」のエントリにその機能の定義があるかどうかしかわかりません。

戻りコードは、現在使用されている「xterm」クライアントが実際にその機能をサポートしているかどうかを示していません。

'xterm'互換 であると主張するソフトウェアプログラムは多種多様であることに注意してください。特に、リリースされたxtermのリファレンス実装のいくつかの連続したバージョンと、おそらくいくつかのフォークがあることを考えると、それらのすべてがすべての「xterm」機能をサポートしているわけではない可能性があります。 xtermのメンテナは、「xtermのコントロールの半分を実装するものはありません」と述べています。

私の知る限り、通常の標準化団体(ANSI、ECMA、The Open Group)は、xtermを定義する標準を公開していません。 xtermの現在のメンテナは、xtermの作業を支援するために vt100テストプログラム(vttest) も維持しています。

したがって、アプリケーション自体がTERM値を利用して、xtermであると主張されている端末が実際に特定のxterm機能をサポートしていることを確認する方法はおそらくありません。少なくとも、xterm機能の任意の選択についてはそうではありません。あなたが人間を巻き込んだ場合(私がvttestがしたように)、あなたはより良いチャンスがあるかもしれません。

1
RedGrittyBrick

はい、持ち運び可能です。これはどう:

# BASH : Configure things differently if current terminal has >= 8 colors.
if which tput > /dev/null 2>&1 && [[ $(tput -T$TERM colors) -ge 8 ]]; then
    echo "Configure stuff to use colors here!"
else
    echo "No tput or less than 8 colors, default to no coloring"
fi
6
jblaine