Bashが色を印刷できるかどうかを確認する方法

Bashが色を印刷できるかどうかを確認する方法

私のプログラムが端末出力をカラーで出力できるかどうかを確認する方法があるかどうか疑問に思います。

次のコマンドを実行します。lessそして、カラー出力を使用するプログラムの出力を見ると、次のように出力が間違って表示されます。

[ESC[0;32m0.052ESC[0m ESC[1;32m2,816.00 kbESC[0m]

ベストアンサー1

アイデアは、プログラムが印刷できない場合に出力を色分けしないようにアプリケーションに通知することです。たとえば、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ではより多くのタイピングが必要ですが、以下を使用すると同じ結果が得られます。イサティとにリストされている機能man 3 terminfo

おすすめ記事