Como posso colorir a saída do gato, incluindo tipos de arquivos desconhecidos em p & b?

4

Eu gosto das cores que tenho em vim . Posso obter minha saída de forma similar a cores quando faço um cat ?

Eu gosto que eu possa usar a ferramenta colorize como em Colorized 'cat' para arquivos fonte e script? . Eu gostaria que esse fosse o meu padrão para cat , por exemplo Eu crio um apelido:

alias cat="source-highlight --out-format=esc -o STDOUT -i"

No entanto, se o tipo de arquivo for desconhecido, digamos .gitignore , então isso retornará:

$ cat .gitignore_global
source-highlight: could not find a language definition for input file .gitignore

Como eu poderia ter o comando fazer uma source-highlight cat versão se for um tipo de arquivo reconhecido e, caso contrário, apenas um padrão em preto e branco cat do arquivo?

Uma opção é ter o alias em ccat , mas eu prefiro que ele substitua cat se possível.

Também seria bom poder usar curingas, por exemplo cat *.rb (ou mesmo ccat *.rb )? Atualmente, isso dá:

$ ccat *.rb
Please, use one of the two syntaxes for invocation: 
source-highlight [OPTIONS]... -i input_file -o output_file
source-highlight [OPTIONS]... [FILES]...

e seria ótimo poder fazer:

ls *.rb | xargs ccat # (or cat)

da mesma maneira que eu posso fazer:

ls *.rb | xargs cat

Atualmente recebo:

$ ls *.rb | xargs ccat
xargs: ccat: No such file or directory
    
por Michael Durrant 12.11.2013 / 02:57

1 resposta

6

Talvez você possa fazer algo como o seguinte script (não testado):

#!/bin/sh

for fn in "$@"; do
    source-highlight --out-format=esc -o STDOUT -i $fn 2>/dev/null || /bin/cat $fn
done

Isso faz algumas coisas:

  • itera através de cada argumento de linha de comando
  • tenta executar source-highlight , redirecionando a saída do erro para /dev/null
  • se source-highlight falhar, execute regular /bin/cat

Você coloca esse script em um arquivo chamado cdc , por exemplo, em seguida, alias cat=cdc .

Como uma função

Você pode adaptar o script acima em uma chamada de função Bash que pode ser incorporada em seus arquivos de ponto da seguinte forma:

cdc() { 
  for fn in "$@"; do 
    source-highlight --out-format=esc -o STDOUT -i $fn 2>/dev/null || /bin/cat $fn;
  done 
}

Editar (Michael) por algum motivo tentando usar ccat para o nome da função não funcionou, mas cdc fez!

    
por 12.11.2013 / 03:16