追加読書

追加読書

次のコードがあります。

bold=''
reset=$(echo -en '\033[0m')
black=$(echo -en '\e[1;30m')
magenta=$(echo -en '\033[00;35m')
blue=$(echo -en '\e[1;34m')
cyan=$(echo -en '\e[1;36m')
green=$(echo -en '\e[1;32m')
orange=$(echo -en '\e[1;33m')
purple=$(echo -en '\e[1;35m')
red=$(echo -en '\e[1;31m')
white=$(echo -en '\e[1;37m')
yellow=$(echo -en '\e[1;33m')
lime_yellow=$(echo -en '\e[1;33m')
power_blue=$(echo -en '\e[1;34m')
blink=$(echo -en '\e[1;31m')
reverse=$(echo -en '\e[1;31m')
underline=$(echo -en '\e[1;31m')

if [ -x /usr/bin/tput ] && tput setaf 1 &>/dev/null; then
    echo "tput color is supported."
    tput sgr0 # Reset colors
    bold=$(tput bold)
    reset=$(tput sgr0)
    black=$(tput setaf 0)
    magenta=$(tput setaf 5)
    blue=$(tput setaf 33)
    cyan=$(tput setaf 37)
    green=$(tput setaf 64)
    orange=$(tput setaf 166)
    purple=$(tput setaf 125)
    red=$(tput setaf 124)
    white=$(tput setaf 15)
    yellow=$(tput setaf 136)
    lime_yellow=$(tput setaf 190)
    power_blue=$(tput setaf 153)
    blink=$(tput blink)
    reverse=$(tput smso)
    underline=$(tput smul)
else
    echo "tput color is not supported. Use old school colors."
fi

echo ${red}RED${green}GREEN${yellow}YELLOW${blue}BLUE${purple}PURPLE${cyan}CYAN${white}WHITE${reset}

tputデフォルトでは、生成される色または古いエスケープ文字の2種類があります\e[1;32m。たとえば、tputちらつきや下線をサポートする型がより興味深いので、コードはtput可能であれば型の色を使用します。以下は、Oracle Linux 7.6(RedHatまたはCentOSと同様)のGUI環境で期待どおりに機能することを示すイメージです。

ここに画像の説明を入力してください。

他の端末で実行すると動作しません。たとえば、以下はMobaXtermで実行されるスナップショットです。

ここに画像の説明を入力してください。

私も試してみましたが、puttyやっぱりできませんね。私のコードに問題がありますか?


修正する

各端末で実行したecho $TERM結果は以下の通りです。

デスクトップ環境のOracle Linux(カラー操作)
出力: xterm-256color

WindowsのMobaXterm(色が機能しない)
出力:xterm

WindowsのPutty(色が機能しない)
出力:xterm

ベストアンサー1

端末タイプを次のように構成する必要があります。puttyputty-256colorまたはputty-scoPuTTYまたはそれに基づくソフトウェア(例:MobaXTerm)を使用している場合。 terminfo データベースの唯一の項目である端末タイプPuTTYを正しく説明してください。

これは広く普及しています間違ったターミナルエミュレータはすべてXTermと互換性があり、terminfoデータベースのエントリとそのエントリがxterm正しく説明していると想定しています。xterm-256color

この誤った考えThomas DickeyのXTerm FAQで言及xtermそしてxterm-256color、アイテムが他の端末エミュレータだけでなくXTermのすべてのバージョンを説明しているわけではないことに注意する価値があります。

terminfoデータベースのエントリは、putty8つのECMA-48カラーのみをサポートする端末を記述します。実はxtermエントリーも同じだ。しかし、単に切り替えるxtermxterm-256colour 間違った。 PuTTYはXTermとは異なります。

実際、PuTTYはISO / IEC 8613制御シーケンスを使用して色(パレットの256色)を索引付けする機能が非常に優れています。実際、2017年からかなり能力ができました。直接ISO / IEC 8613制御シーケンスカラー(24ビットRGBカラー)を使用します。このputty-256colourトピックでは、前者について説明します。 terminfoには後者を完全に説明する方法はありません。

使用正しい端末タイプをtput検索して正しい制御順序。

追加読書

おすすめ記事