Script colorido do bash [duplicado]

1

Eu quero escrever um script que imprima algumas informações para o terminal STDOUT. Para melhor legibilidade e estrutura, gostaria de colorir os diferentes itens e destacá-los desta maneira.

Agora, existe um equivalente Bash ao comando% CM_de% do Windows-CMD / DOS, que define o plano de fundo e a cor da fonte usados atualmente? E como faço para redefinir a cor de volta para o padrão do terminal depois de terminar meu script?

Editar:
Eu li comando Pipable para imprimir em cores? , mas apenas algumas respostas são escritas no Bash para que elas possam ser facilmente incluídas no meu roteiro. Além disso, as respostas faltam os seguintes pontos que eu quero:

  • alterar a cor de fundo
  • exibe a cor branca do primeiro plano, a cor padrão definida em COLOR é exibida em vez disso (o que é neon verde para mim)
  • torne todas as cores disponíveis acessíveis de alguma forma, não apenas um pequeno subconjunto de palavras-chave. Eu poderia imaginar, por exemplo algum tipo de codificação RGB para passar como argumento de função para especificar facilmente uma cor.
por Byte Commander 22.09.2015 / 20:11

2 respostas

2

Um pequeno script para obter os códigos enigmáticos ;)

#!/bin/bash
#
#   This file echoes a bunch of color codes to the 
#   terminal to demonstrate what's available.  Each 
#   line is the color code of one forground color,
#   out of 17 (default + 16 escapes), followed by a 
#   test use of that color on all nine background 
#   colors (default + 8 escapes).
#

T='gYw'   # The test text

echo -e "\n                 40m     41m     42m     43m\
     44m     45m     46m     47m";

for FGs in '    m' '   1m' '  30m' '1;30m' '  31m' '1;31m' '  32m' \
           '1;32m' '  33m' '1;33m' '  34m' '1;34m' '  35m' '1;35m' \
           '  36m' '1;36m' '  37m' '1;37m';
  do FG=${FGs// /}
  echo -en " $FGs 3[$FG  $T  "
  for BG in 40m 41m 42m 43m 44m 45m 46m 47m;
    do echo -en "$EINS 3[$FG3[$BG  $T  3[0m";
  done
  echo;
done
echo

Ocódigoéfácildelernatabelaquegerouoscriptanterior.

\e[1;37m\e[44m

  • \e[1;37m-primeiroplano

  • \e[44m-Planodefundo

Algunsexemplos

  • Primeiroplanobranco

    TOA="\e[0m" # No Color
    whiteForeground="\e[1;37m" 
    echo -e "${whiteForeground}foo${TOA}"
    
  • Branco em azul

    TOA="\e[0m" # No Color
    whiteOnBlue="\e[1;37m\e[44m" 
    echo -e "${whiteOnBlue}foo${TOA}"
    

E um script bash de amostra:

red="\e[0;31m"
green="\e[0;32m"
yellow="\e[0;33m"
blue="\e[0;34m"
TOA="\e[0m" # No Color

if [[ $cfg_log_level == "" ]]; then
  cfg_log_level=4
fi

function logError () {
  if [[ $cfg_log_level == "1" ]] || [[ $cfg_log_level == "2" ]] || [[ $cfg_log_level == "3" ]] || [[ $cfg_log_level == "4" ]]; then
    echo -e "${red}$1${TOA}" 1>&2
  fi
}

function logWarn () {
  if [[ $cfg_log_level == "2" ]] || [[ $cfg_log_level == "3" ]] || [[ $cfg_log_level == "4" ]]; then
    echo -e "${yellow}$1${TOA}" 1>&2
  fi
}

function logInfo () {
  if [[ $cfg_log_level == "3" ]] || [[ $cfg_log_level == "4" ]]; then
    echo -e "${green}$1${TOA}" 1>&2
  fi
}

function logDebug () {
  if [[ $cfg_log_level == "4" ]]; then
    echo -e "${blue}$1${TOA}" 1>&2
  fi
}
    
por A.B. 22.09.2015 / 21:21
0

Você pode usar tput

  • tput setaf <color> define a cor do primeiro plano
  • tput setab <color> define a cor do plano de fundo

as cores são 1 bit b, g, r :

  0. black
  1. red
  2. green
  3. yellow
  4. blue
  5. magenta
  6. cyan
  7. white

tput pode definir outros atributos dos caracteres, como sublinhado, negrito, piscar, etc. Consulte man terminfo para obter mais informações.

Eu acho que uma boa maneira de usar isso é definindo variáveis de maneira shemanticamente. ou seja,

startheader='tput setaf 0''tput setab 7'
endheader='tput sgr0'
startprompt='tput bold'
endprompt=$endheader

echo ${startheader}The Header${endheader}
echo -n ${startprompt}Enter value: ${endprompt}
read value
    
por user448115 22.09.2015 / 23:49