Conheço bibliotecas em linguagens como Ruby e Javascript para facilitar a coloração de seus scripts de terminal usando nomes de cores como "vermelho".
Mas existe algo assim para scripts de shell em Bash, ou Ksh, ou qualquer outra coisa?
Responder1
Você pode definir cores em seus scripts bash da seguinte forma:
red=$'\e[1;31m'
grn=$'\e[1;32m'
yel=$'\e[1;33m'
blu=$'\e[1;34m'
mag=$'\e[1;35m'
cyn=$'\e[1;36m'
end=$'\e[0m'
E então use-os para imprimir nas cores desejadas:
printf "%s\n" "Text in ${red}red${end}, white and ${blu}blue${end}."
Responder2
Você pode usar tput
OUprintf
Usando tput
,
basta criar funções como abaixo e usá-las
shw_grey () {
echo $(tput bold)$(tput setaf 0) $@ $(tput sgr 0)
}
shw_norm () {
echo $(tput bold)$(tput setaf 9) $@ $(tput sgr 0)
}
shw_info () {
echo $(tput bold)$(tput setaf 4) $@ $(tput sgr 0)
}
shw_warn () {
echo $(tput bold)$(tput setaf 2) $@ $(tput sgr 0)
}
shw_err () {
echo $(tput bold)$(tput setaf 1) $@ $(tput sgr 0)
}
você pode chamar a função acima usandoshw_err "WARNING:: Error bla bla"
Usandoprintf
print red; echo -e "\e[31mfoo\e[m"
Responder3
autoload -U colors
colors
echo $fg[green]YES$fg[default] or $fg[red]NO$fg[default]?
Responder4
Melhor é usar tput
which irá lidar com caracteres de escape dependendo dos recursos de saída/terminal. (Se um terminal não puder interpretar \e[*
códigos de cores, ele ficará "poluído", o que tornará a saída mais difícil de ler. (Ou, às vezes, se você grep
tiver essa saída, verá isso \e[*
nos resultados)
Veja issotutorial paratput
.
Você pode escrever :
blue=$( tput setaf 4 ) ;
normal=$( tput sgr0 ) ;
echo "hello ${blue}blue world${normal}" ;
Aqui está um tutorialpara imprimir um relógio colorido no terminal.
Além disso, observe que tput
ainda pode imprimir caracteres de escape ao redirecionar STDOUT para um arquivo:
$ myColoredScript.sh > output.log ;
# Problem: output.log will contain things like "^[(B^[[m"
Para evitar que isso aconteça, configure suas tput
variáveis conforme proposto emesta solução.