質問: bashがカラーを印刷できるかどうかを確認する方法 プログラムが色を使用して端末出力を出力できるかどうかを確認する方法があるかどうかを知りたいです。lessのようなコマンドを実行し、色を使用して出力するプログラムからの出力を見ると、出力は次のように間違って表示されます[esc[0;32m0.052esc[0m esc[1;32m2,816.00 kbesc[0m]ありがとう
回答: アイデアは、アプリケーションが出力を色付けしないことを知っていることです。たとえば、プログラムがcronジョブを介してファイルに出力をログに記録できない場合、色付きの出力をログに記録する必要はありませんが、手動で実行すると、表示したいです。色付きの出力 アプリケーションをどの言語で作成していますか?通常のアプローチは、出力デバイスがttyであるかどうかを確認し、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にリストされている関数を使用して同じ結果を得ることができます。