Je suis un peu nouveau dans le script bash, et je me demande s’il existe un programme ou une commande intégrée à diriger qui imprimera dans une couleur spécifiée? Ou y a-t-il un argument d'écho pour le faire?
Comme je pouvais faire:
echo Hi | commandhere -arguement blue
et il afficherait "Salut" dans la couleur bleue?
Je ne connais aucun utilitaire d'impression couleur, mais vous pouvez le faire facilement avec une fonction Shell comme celle-ci:
# colorize stdin according to parameter passed (GREEN, CYAN, BLUE, YELLOW)
colorize(){
GREEN="\033[0;32m"
CYAN="\033[0;36m"
GRAY="\033[0;37m"
BLUE="\033[0;34m"
YELLOW="\033[0;33m"
NORMAL="\033[m"
color=\$${1:-NORMAL}
# activate color passed as argument
echo -ne "`eval echo ${color}`"
# read stdin (pipe) and print from it:
cat
# Note: if instead of reading from the pipe, you wanted to print
# the additional parameters of the function, you could do:
# shift; echo $*
# back to normal (no color)
echo -ne "${NORMAL}"
}
echo hi | colorize GREEN
Si vous voulez vérifier d'autres couleurs, jetez un oeil à cette liste . Vous pouvez ajouter un support pour n'importe quelle couleur à partir de là, en créant simplement une variable supplémentaire à cette fonction avec le nom et la valeur corrects.
J'ai créé cette fonction que j'utilise dans les scripts bash.
# Fonction permettant d'écho dans la couleur spécifiée Echoincolor () { Case $ 1 sur "Rouge") tput setaf 1 ;; "Verte ") tput setaf 2 ;; " orange ") tput setaf 3 ;; " bleu ") tput setaf 4 ;; " violet ") tput setaf 5 ;; "cyan") tput setaf 6 ;; "grey" | "gris") tput setaf 7 ;; "blanc") tput setaf 8 ;; esac echo "$ 2"; tput sgr0 }
Ensuite, je l’appelle comme ceci echoincolor green "This text is in green!"
Alternativement, utilisez printf
# Fonction permettant d’imprimer dans la couleur spécifiée Colorprintf () { Case $ 1 sur "Rouge") tput setaf 1 ;; "Vert ") tput setaf 2 ;; " orange ") tput setaf 3 ;; " bleu ") tput setaf 4 ;; " violet ") tput setaf 5 ;; "cyan") tput setaf 6 ;; "grey" | "gris") tput setaf 7 ;; "blanc") tput setaf 8 ;; esac printf "$ 2"; tput Sgr0 }
Ensuite, appelez-le comme ceci colorprintf green "This text is in green!"
Remarque , echo
fournit une nouvelle ligne, tandis que printf
non.
Il y a une réponse beaucoup plus élégante que n'importe laquelle d'entre elles:
Sudo apt-get install grc
(qui installe également grcat
)
Maintenant, exécutez:
echo "[SEVERE] Service is down" | grcat ~/conf.username
Où conf.myusername
contient:
regexp=SEVERE
colours=on_red
count=more
(pour une raison quelconque, je ne trouve pas l'expression rationnelle correcte pour "tout entre guillemets")
J'utilise ce vieux script, nommé hilite.pl, tiré du Web, déjà avec la ligne "auteur inconnu"!
#!/usr/bin/Perl -w
### Usage: hilite <ansi command> <target string>
### Purpose: Will read text from standard input and perform specified highlighting
### command before displaying text to standard output.
### License: GNU GPL
# unknown author
$|=1; # don't buffer i/o
$command = "$ARGV[0]";
$target = "$ARGV[1]";
$color = "\e[" . $command . "m";
$end = "\e[0m";
while(<STDIN>) {
s/($target)/$color$1$end/;
print $_;
}
Ensuite, je peux l'utiliser dans les pipes, pour "hilite" la sortie du journal ou d'autres choses, en utilisant regexp/PCRE:
echo 'hello color world!!' | hilite.pl 34 "[Hh]el[^ ]*" | hilite.pl 43 .orld | hilite.pl 32 "\scolor\s"
Cela va peindre bonjour en bleu, la couleur en vert et le monde en fond jaune
Vous pouvez voir la liste de couleurs avec (vous pouvez développer l'expression bash jusqu'à {01..255} si vous le souhaitez):
for i in {01..10} {30..49} {90..110} ; do echo $i | hilite.pl $i $i ; done