プログラムが色を使用して端末出力を出力できるかどうかを確認する方法があるかどうかを知りたいです。
less
などのコマンドを実行する 色を使用して出力するプログラムからの出力を見ると、出力は次のように間違って表示されます
[ESC[0;32m0.052ESC[0m ESC[1;32m2,816.00 kbESC[0m]
ありがとう
承認された回答:
プログラムが印刷できない場合、たとえばcronジョブを介して出力をファイルに記録できない場合、アプリケーションは出力に色を付けないことを知っているという考えです。色付きの出力を記録する必要はありませんが、手動で実行する場合は、表示するのが好きです。色付きの出力
アプリケーションをどの言語で書いていますか?
通常のアプローチは、出力デバイスがttyであるかどうかを確認し、そうである場合は、そのタイプの端末が色をサポートしているかどうかを確認することです。
bash
で 、それは次のようになります
# check if stdout is a terminal...
if test -t 1; then
# see if it supports colors...
ncolors=$(tput colors)
if test -n "$ncolors" && test $ncolors -ge 8; then
bold="$(tput bold)"
underline="$(tput smul)"
standout="$(tput smso)"
normal="$(tput sgr0)"
black="$(tput setaf 0)"
red="$(tput setaf 1)"
green="$(tput setaf 2)"
yellow="$(tput setaf 3)"
blue="$(tput setaf 4)"
magenta="$(tput setaf 5)"
cyan="$(tput setaf 6)"
white="$(tput setaf 7)"
fi
fi
echo "${red}error${normal}"
echo "${green}success${normal}"
echo "${green}0.052${normal} ${bold}${green}2,816.00 kb${normal}"
# etc.
Cでは、さらに多くの入力を行う必要がありますが、isattyとman 3 terminfo
にリストされている関数を使用して同じ結果を得ることができます。 。