Nomes de cores de terminal "amigáveis" em scripts de shell?

Nomes de cores de terminal "amigáveis" em scripts de shell?

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

Em zsh:

autoload -U colors
colors

echo $fg[green]YES$fg[default] or $fg[red]NO$fg[default]?

Responder4

Melhor é usar tputwhich 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ê greptiver 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 tputainda 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 tputvariáveis ​​conforme proposto emesta solução.

informação relacionada