以下を使用して端末の色サポートをテストするtput
#!/bin/sh
colors_supported()
{
command -v tput > /dev/null 2>&1 && tput setaf 1 > /dev/null 2>&1
}
tput
現在、このコードを使用して端末の色がサポートされていることを確認しています。
問題は、このコードがPOSIXで100%移植可能で、さまざまなUnixベースのシステムで利用可能であることです。私はLinux、* BSDなどについて話しています。
今はどこでも試してみることができないので尋ねます。
任意の色:
tput setaf 1
tput setaf 2
tput setaf 3
tput setaf 4
tput setaf 5
tput setaf 6
tput setaf 7
答え1
長い話を短く
推奨される検査は、特定のタイプのUnixシステムでは機能しません。
長い答え
POSIXはこれに対処しません。
tput
、でも読んでください移植性マニュアルページの一部。ほとんどのシステムはterminfo名(たとえば
setaf
)を使用します。たとえば、FreeBSD(デフォルトライブラリは
ncurses
)ですが、次のようになります。tput
名前のみtermcap
サポートされます。 FreeBSDマニュアルページ確かではありませんが、一度見てくださいソースコード、これtgetstr
(termcap
)の代わりにtigetstr
(terminfo
)。これ
terminfo
マニュアルページには、およびterminfo
名前termcap
がリストされています(例:setaf
および)AF
。 2つを連続して試すことができます。終了コード関数が定義されているかどうかを示します。たとえば、次の方法で両方のケースを処理するようにテスト関数を変更できます。
colors_supported() { command -v tput > /dev/null 2>&1 && ( tput setaf || tput AF ) > /dev/null 2>&1 }