Estou ciente de bibliotecas em idiomas como Ruby e Javascript para facilitar a colorização dos scripts de terminal usando nomes de cores como "vermelho".
Mas existe algo assim para scripts de shell no Bash, no Ksh, ou o que seja?
Estou ciente de bibliotecas em idiomas como Ruby e Javascript para facilitar a colorização dos scripts de terminal usando nomes de cores como "vermelho".
Mas existe algo assim para scripts de shell no Bash, no Ksh, ou o que seja?
Respostas:
Você pode definir cores em seus scripts bash da seguinte maneira:
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 use-os para imprimir nas cores necessárias:
printf "%s\n" "Text in ${red}red${end}, white and ${blu}blue${end}."
Você pode usar tput
OUprintf
Usando tput
,
basta criar a função como abaixo e usá-los
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 usando shw_err "WARNING:: Error bla bla"
Usando printf
print red; echo -e "\e[31mfoo\e[m"
echo -e
não é printf
e também precisa de um aviso de que difere da tput
opção por não se adaptar automaticamente ao terno $TERM
.
No zsh :
autoload -U colors
colors
echo $fg[green]YES$fg[default] or $fg[red]NO$fg[default]?
print -P '%F{red}blah%f'
Para usos comuns simples (linha completa de texto em uma única cor, com nova linha à direita), modifiquei o código de jasonwryan da seguinte maneira:
#!/bin/bash
red='\e[1;31m%s\e[0m\n'
green='\e[1;32m%s\e[0m\n'
yellow='\e[1;33m%s\e[0m\n'
blue='\e[1;34m%s\e[0m\n'
magenta='\e[1;35m%s\e[0m\n'
cyan='\e[1;36m%s\e[0m\n'
printf "$green" "This is a test in green"
printf "$red" "This is a test in red"
printf "$yellow" "This is a test in yellow"
printf "$blue" "This is a test in blue"
printf "$magenta" "This is a test in magenta"
printf "$cyan" "This is a test in cyan"
awk -v red="$(printf '\e[1;31m%%s\e[0m\\n')" -v green="$(printf '\e[1;32m%%s\e[0m\\n')" 'BEGIN { printf red, "This text is in red"; printf green, "This text is in green" }'
Melhor é usar o tput
que manipulará caracteres de escape, dependendo dos recursos de saída / terminal. (Se um terminal não puder interpretar \e[*
códigos de cores, será "poluído", o que dificulta a leitura da saída. (Ou, às vezes, se vocêgrep
tal saída, você vai ver aqueles \e[*
nos resultados)
Veja este tutorial paratput
.
Você pode escrever :
blue=$( tput setaf 4 ) ;
normal=$( tput sgr0 ) ;
echo "hello ${blue}blue world${normal}" ;
Aqui está um tutorial para 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 como proposto nesta solução .