為什麼我的顏色沒有在所有終端中顯示?
我有以下一段程式碼。
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
生成的或老式的轉義字元,如\e[1;32m
. 由於tput
類型更有趣,例如它支持閃爍和下劃線,因此程式碼tput
盡可能使用類型顏色。這是一張證明它在 Oracle Linux 7.6(有點像 RedHat 或 CentOS)GUI 環境中按預期工作的圖像。當我從其他終端執行它時,它不起作用。例如,下面是在 MobaXterm 中執行時的快照。
我也試過
putty
了,也不行。我的程式碼有什麼問題嗎?更新
我
echo $TERM
在每個終端執行,下面是結果。帶有桌面環境的 Oracle Linux(彩色作品) 輸出:xterm-256color Windows 上的 MobaXterm(顏色不起作用) 輸出:xterm Windows 上的膩子(顏色不起作用) 輸出:xterm
這些程式碼應該可以工作:
magenta=$(tput setaf 5) blue=$(tput setaf 4) cyan=$(tput setaf 6) green="$(tput setaf 2)" purple=$(tput setaf 5) red=$(tput setaf 1) white=$(tput setaf 7) yellow=$(tput setaf 3)
您必須將您的終端類型配置為
putty
、putty-256color
,或者putty-sco
在使用 PuTTY 或基於它的東西(例如 MobaXTerm)時。它們是 terminfo 數據庫中的條目正確描述 PuTTY的唯一終端類型。一個普遍的錯誤假設是終端仿真器都與 XTerm 兼容,並且 terminfo 數據庫中的
xterm
和xterm-256color
條目正確地描述了它們。這種錯誤想法在 Thomas Dickey 的 XTerm FAQ 中被指出,值得注意的是
xterm
和xterm-256color
條目甚至沒有描述 XTerm 的所有版本,更不用說其他終端仿真器了。terminfo 數據庫中的
putty
條目描述了一個僅支持 8 種 ECMA-48 顏色的終端。確實,xterm
條目也是如此。但是僅僅從 切換xterm
到xterm-256colour
是錯誤的。PuTTY 與 XTerm 不同。事實上,PuTTY 非常有能力使用 ISO/IEC 8613 控制序列來索引顏色(調色板中的 256 種顏色)。事實上,自 2017 年以來,它完全能夠使用 ISO/IEC 8613 控制序列進行直接顏色(24 位 RGB 顏色)。該
putty-256colour
條目描述了前者。terminfo 沒有辦法完全描述後者。使用正確的終端類型,並
tput
會查找正確的控制序列。進一步閱讀