tput
を使用して端末の色のサポートをテストします#!/bin/sh
colors_supported()
{
command -v tput > /dev/null 2>&1 && tput setaf 1 > /dev/null 2>&1
}
現在、このコードを使用して、tput
端末の色がサポートされているかどうかを確認しています。
うまく機能しているようですが、問題は次のとおりです。このコードはPOSIX-ly 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
推奨されるチェックは、一部の種類のUnixシステムでは機能しません。
POSIXは、tput
のこの側面については説明していませんが、マニュアルページの Portable セクションを読んでください。
ほとんどのシステムはterminfo名(setaf
など)を使用します。
たとえば、FreeBSD(基礎となるライブラリはncurses
ですが)は、tput
名のみをサポートするtermcap
を提供します。 FreeBSD マニュアルページ は明確ではありませんが、 tgetstr
を使用する ソースコード を参照してください。 (termcap
)ではなく tigetstr
(terminfo
)。
terminfo
マニュアルページには、terminfo
およびtermcap
の名前が一覧表示されます(例:setaf
およびAF
)。 exit code は機能が定義されているかどうかを示すため、両方を連続して使用してみることができます。
たとえば、次のいずれかの場合を処理するようにテスト関数を変更できます。
colors_supported()
{
command -v tput > /dev/null 2>&1 && ( tput setaf || tput AF ) > /dev/null 2>&1
}