Tenho o seguinte trecho de código.
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}
Basicamente, existem dois tipos de cores, tput
geradas ou os antigos caracteres de escape como \e[1;32m
. Como o tput
tipo é mais interessante, por exemplo, ele suporta piscar e sublinhar, o código usa a tput
cor do tipo, se possível. Aqui está uma imagem para provar que funciona como esperado no ambiente GUI do Oracle Linux 7.6 (como RedHat ou CentOS).
Quando executo de outros terminais, não funciona. Por exemplo, abaixo está o instantâneo ao executar no MobaXterm.
Também tentei putty
e também não funciona. Tem algo errado com meu código?
Atualizar
Executei echo $TERM
em cada um dos terminais e abaixo está o resultado.
Oracle Linux com ambiente Desktop (trabalhos em cores) Saída: xterm-256color MobaXterm no Windows (a cor não funciona) Saída: xterm massa no Windows (a cor não funciona) Saída: xterm
Você deve configurar seu tipo de terminal como
putty
,putty-256color
ouputty-sco
ao usar PuTTY, ou coisas baseadas nele, como MobaXTerm. Eles são os únicos tipos de terminal cujas entradas no banco de dados terminfo descrevem corretamente o PuTTY .É uma suposição incorreta generalizada de que os emuladores de terminal são todos compatíveis com o XTerm e que as entradas
xterm
exterm-256color
no banco de dados terminfo os descrevem corretamente.Esse pensamento errôneo é mencionado no FAQ do XTerm de Thomas Dickey e vale a pena observar que as entradas
xterm
exterm-256color
nem mesmo descrevem todas as versões do XTerm, muito menos outros emuladores de terminal.A
putty
entrada no banco de dados terminfo descreve um terminal que só é capaz de 8 cores ECMA-48. Como, de fato, axterm
entrada. Mas simplesmente mudar dexterm
paraxterm-256colour
está errado . PuTTY difere do XTerm.Na verdade, o PuTTY é capaz de indexar cores (256 cores de uma paleta) usando sequências de controle ISO/IEC 8613. De fato, desde 2017, é bastante capaz de cores diretas (cor RGB de 24 bits) usando sequências de controle ISO/IEC 8613. A
putty-256colour
entrada descreve o primeiro. terminfo não tem uma maneira de descrever completamente o último.Use o tipo de terminal correto
tput
e procurará as sequências de controle corretas .Leitura adicional
Esses códigos devem funcionar:
É a capacidade do terminal que não suporta as cores além das 8 básicas. Encontrei este pedaço de código para testar todas as cores disponíveis (fonte: tabela de cores tput setaf? Como determinar códigos de cores? ):
Abaixo está a saída de todos os três terminais que testei.
Oracle Linux com ambiente Desktop
MobaXterm no Windows
massa no Windows
Portanto, o terminal não suporta as cores além das 8 básicas. Para ser seguro e portátil, use apenas essas 8 cores.