Piping um comando através de um filtro de cor

11

Existe algo parecido com isso no Unix?

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

Aqui, não quero dizer que o texto literal de código de cores apareça (para ser colado em um arquivo, por exemplo). Eu só quero dizer que o texto realmente aparece no terminal como essa cor. Isso é possível?

    
por George 14.04.2016 / 16:28

3 respostas

14

Aqui está um pequeno script que faz exatamente isso. Salve isso como color em um diretório no seu $PATH (por exemplo, ~/bin se estiver no seu $PATH ):

#!/usr/bin/env perl

use strict;
use warnings;
use Term::ANSIColor; 

my $color=shift;
while (<>) {
    print color("$color").$_.color("reset");
} 

Em seguida, passe seu texto pelo script, atribuindo . como padrão para corresponder e especificar uma cor:

Ascoressuportadasdependemdashabilidadesdoseuterminal.Paramaisdetalhes,consultea documentação do pacote Term::ANSIColor .

    
por 14.04.2016 / 16:42
20

Você usaria tput para isso:

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

Isso pode ser usado para criar um canal:

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

As cores básicas são respectivamente preto (0), vermelho (1), verde, amarelo, azul, magenta, ciano e branco (7). Você encontrará todos os detalhes na terminfo(5) manpage .

    
por 14.04.2016 / 16:34
6

com zsh :

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

E então:

$ echo "while" | blue
while
    
por 14.04.2016 / 16:58