Piping une command à travers un filter de couleur

Est-ce que quelque chose comme ça existe dans Unix?

$ echo "this should show in red" | red $ echo "this should show in green" | green $ echo "this should show in blue" | blue 

Ici, je ne veux pas dire pour le text de code de couleur littérale à venir (être collé dans un file, par exemple). Je veux juste dire que le text apparaîtra dans le terminal sous cette couleur. Est-ce possible?

Voici un petit script qui fait exactement cela. Sauvegardez ceci en tant que color dans un directory de votre $PATH (par exemple, ~/bin si c'est dans votre $PATH ):

 #!/usr/bin/env perl use ssortingct; use warnings; use Term::ANSIColor; my $color=shift; while (<>) { print color("$color").$_.color("reset"); } 

Ensuite, passez votre text à travers le script, en donnant . comme model à assortir et en spécifiant une couleur:

capture d'écran d'un terminal exécutant le script

Les colors sockets en charge dépendent des capacités de votre terminal. Pour plus de détails, voir la documentation du packageage Term::ANSIColor .

Vous utiliseriez tput pour cela:

 tput setaf 1 echo This is red tput sgr0 echo This is back to normal 

Cela peut être utilisé pour build un tuyau:

 red() { tput setaf 1; cat; tput sgr0; } echo This is red | red 

Les colors de base sont respectivement le noir (0), le rouge (1), le vert, le jaune, le bleu, le magenta, le cyan et le blanc (7). Vous findez tous les détails dans la page de terminfo(5) .

Avec zsh :

 autoload colors; colors for color (${(k)fg}) eval "$color() {print -n \$fg[$color]; cat; print -n \$reset_color}" 

Et alors:

 $ echo "while" | blue while