web-dev-qa-db-fra.com

Noms de couleur terminale "amicaux" dans les scripts Shell?

Je suis au courant des bibliothèques dans des langues telles que Ruby et JavaScript pour faciliter la coloration des scripts de vos terminaux en utilisant des noms de couleur comme "Rouge".

Mais y a-t-il quelque chose comme ça pour les scripts shell à bash ou ksh ou quoi que ce soit?

26
themirror

Vous pouvez définir des couleurs dans vos scripts de bash comme si:

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'

Puis utilisez-les à imprimer dans vos couleurs requises:

printf "%s\n" "Text in ${red}red${end}, white and ${blu}blue${end}."
40
jasonwryan

Vous pouvez utiliser tput OR printf

tilisation tput,

il suffit de créer une fonction comme ci-dessous et utilisez-les

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)
}

vous pouvez appeler la fonction ci-dessus à l'aide de shw_err "WARNING:: Error bla bla"

tilisation printf

print red; echo -e "\e[31mfoo\e[m"
12
Rahul Patil

dans ZSH :

autoload -U colors
colors

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

Pour des utilisations communes simples (ligne complète de texte dans une seule couleur uniquement, avec la nouvelle ligne de fin) J'ai modifié code de Jasonwryan comme suit:

#!/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"
5
Wildcard

Mieux vaut utiliser tput qui gérera des caractères d'échappement en fonction des capacités de sortie/terminal. (Si un terminal ne peut pas interpréter \e[* Codes de couleur, alors il sera "pollué" qui rend la production plus difficile à lire. (Ou parfois, si vous grep cette sortie, vous verrez ces \e[* dans les résultats)

Voir ceci tutoriel pour tput .

Tu peux écrire :

blue=$( tput setaf 4 ) ;
normal=$( tput sgr0 ) ;
echo "hello ${blue}blue world${normal}" ;

Voici un tutoriel pour imprimer une horloge de couleur dans le terminal.

Aussi, notez que tput peut toujours imprimer le caractère d'échappement lors de la redirection de stdout dans un fichier:

$ myColoredScript.sh > output.log ;
# Problem: output.log will contain things like "^[(B^[[m"

Pour empêcher que cela se produise, configurez vos variables tput comme proposé dans cette solution .

3
el-teedee