bat: Um Clone do cat com Realce de Sintaxe

bat: Um Clone do cat com Realce de Sintaxe

O Que Voce Vai Aprender

  • Como usar bat em vez de cat para exibir arquivos com cor e numeros de linha
  • Como corrigir o problema batcat no Ubuntu/Debian (o comando nao se chama bat)
  • Como remover decoracoes para igualar a saida do cat em pipes e scripts
  • Extras praticos como colorir paginas man que compensam no dia a dia

Publico-Alvo: Iniciantes em Linux, qualquer pessoa insatisfeita com a saida simples do cat

Introducao: O Problema de Lina "cat E Dificil de Ler"

Lina: Linny-senpai, abri um arquivo de configuracao com cat config.json, mas tudo e da mesma cor e meus olhos simplesmente escorregam. Reabrir em um editor tambem e trabalhoso.
Veterano Linny: Ah, o cat apenas "despeja o conteudo como esta" -- sem cor, sem numeros de linha. Existe um cat melhorado chamado bat que torna tudo legivel de uma so vez.
Lina: bat? Como o animal?
Veterano Linny: Escrito b-a-t, sim. E um trocadilho com cat. Realce de sintaxe, numeros de linha, ate marcadores de diff Git -- tudo embutido desde o inicio. Vamos aprender juntos hoje.

A Resposta Curta

  • bat = um substituto do cat com cor, numeros de linha, diffs Git e paginacao automatica prontos para uso
  • No Ubuntu/Debian, sudo apt install bat instala, mas o comando e batcat (criar alias para bat e padrao)
  • Para pipes e scripts, bat -p (sem decoracoes) / bat -pp (sem pager tambem) retornam ao comportamento estilo cat

1. O Que E o bat?

Conclusao: bat e um substituto do cat. Exibe conteudo de arquivos como o cat, mas adiciona realce de sintaxe, numeros de linha, marcadores de mudanca Git e paginacao automatica.

Lina: O que e realmente diferente entre bat e cat?
Veterano Linny: Eles fazem o mesmo trabalho -- "mostrar o conteudo de um arquivo." A diferenca e a legibilidade. Onde cat transmite texto simples em preto e branco, bat colore a sintaxe, adiciona numeros de linha e ate marca linhas alteradas quando voce esta em um repositorio Git.
Lina: Tao completo. Pode realmente substituir o cat?
Veterano Linny: Para o "deixe-me dar uma olhada neste arquivo" do dia a dia, bat cobre quase tudo. Porem, nao e um substituto perfeito, entao voce precisa de um pouco de cuidado em pipes e scripts. Vamos cobrir isso depois.

bat e uma ferramenta em Rust desenvolvida por sharkdp/bat. As principais diferencas do cat:

Aspecto cat bat
Realce de sintaxe Nenhum Sim (detecta a linguagem automaticamente)
Numeros de linha Com -n Ativado por padrao
Exibicao de diff Git Nenhuma Sim (marca linhas alteradas)
Arquivos longos Rola tudo Abre automaticamente less (pager)
Caracteres nao imprimiveis -A simboliza -A simboliza
Comportamento em pipe Sempre texto simples Desativa decoracoes automaticamente (depois)

2. Instalacao e o Problema batcat

Conclusao: No Ubuntu/Debian, apt install bat funciona, mas o comando se chama batcat para evitar conflito de nomes. Criar um symlink para bat e a correcao padrao.

Lina: Quero instalar agora. Como?
Veterano Linny: O nome do pacote difere ligeiramente por distribuicao. Vamos comecar aqui.
# Ubuntu / familia Debian
$ sudo apt install bat

# Fedora / familia RHEL
$ sudo dnf install bat

# Arch Linux
$ sudo pacman -S bat

# macOS (Homebrew)
$ brew install bat

A Armadilha do Ubuntu/Debian: O Comando E batcat

No Debian, para evitar conflito de nome de binario com outro pacote, o comando se chama batcat em vez de bat. Digitar bat resulta em command not found.

Lina: Acabei de aprender o nome e agora bat nao funciona -- que triste...
Veterano Linny: Nao se preocupe. E o mesmo padrao do problema fdfind com fd. Adicione um symlink e voce pode chama-lo como bat.

Para usa-lo com o nome bat, crie um symlink em ~/.local/bin.

mkdir -p ~/.local/bin
ln -s "$(which batcat)" ~/.local/bin/bat

Se ~/.local/bin nao esta no seu PATH, adicione no ~/.bashrc e recarregue.

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

Confirme a instalacao e versao:

$ bat --version
bat 0.24.0

Se Voce Pular o Symlink no Ubuntu

Se o symlink parece trabalhoso, voce pode ler cada bat nos exemplos deste artigo como batcat e funciona do mesmo jeito. Mas o symlink permite copiar e colar bat de outros artigos e documentacoes diretamente, o que e mais conveniente.

3. O Basico de Usar o bat

Conclusao: bat NOMEDOARQUIVO mostra o conteudo com cor e numeros de linha. Passe multiplos arquivos e ele os separa com cabecalhos rotulados.

Veterano Linny: O uso e identico ao cat -- basta passar o nome do arquivo que voce quer exibir.
$ bat config.json
───────┬────────────────────────────────────────
       │ File: config.json
───────┼────────────────────────────────────────
   1   │ {
   2   │   "name": "penguin",
   3   │   "version": "1.0.0",
   4   │   "debug": false
   5   │ }
───────┴────────────────────────────────────────

Como Ler a Saida

  • Os numeros a esquerda: numeros de linha (equivalente ao cat -n, ativado por padrao)
  • O File: config.json no topo: o cabecalho com o nome do arquivo
  • As cores: a linguagem e detectada automaticamente pela extensao e realcada sintaticamente (JSON acima)

Passe multiplos arquivos e cada um recebe seu proprio cabecalho como separador.

$ bat a.txt b.txt
Lina: Com cat a.txt b.txt os conteudos se misturavam e eu nao conseguia saber onde b.txt comecava.
Veterano Linny: Certo, esse e um ponto silenciosamente util. bat insere um cabecalho por arquivo, entao verificar multiplos arquivos fica muito mais facil.

Arquivos Longos Viram Pager Automaticamente

Abra um arquivo grande demais para a tela com bat e ele automaticamente abre o less (um pager). Role com as teclas de seta ou Space, e saia com q. Voce nao vai perder sua posicao com o scroll desenfreado estilo cat.

4. Como Tornar Simples Como o cat?

Conclusao: Para remover decoracoes (numeros de linha, cabecalho, linhas de grade), use -p (--plain). Para tambem parar o pager e se comportar exatamente como cat, use -pp.

Lina: A cor e os numeros de linha sao legais, mas as vezes as linhas de grade e os numeros atrapalham quando eu so quero copiar o conteudo.
Veterano Linny: Boa observacao. Para isso, existem opcoes para remover as decoracoes -- dois niveis delas, dependendo do que voce precisa.
# Remover numeros de linha, cabecalho e grade (manter cor)
$ bat -p config.json

# Remover decoracoes E o pager (quase identico ao cat)
$ bat -pp config.json

Dois Niveis de Remocao de Decoracoes

Opcao O que e removido O que permanece
-p Numeros de linha, cabecalho, grade Cor, paginacao automatica
-pp Tudo acima + paginacao automatica Cor (em um terminal)
Lina: Entao -p duas vezes e -pp. Facil de lembrar.
Veterano Linny: Exatamente. -pp significa "sem decoracoes, sem pager", entao e um substituto facil para o cat. E a escolha ideal quando voce so quer dar uma olhada rapida no conteudo.

Para inspecionar caracteres nao imprimiveis (tabulacoes, fins de linha, espacos finais), use -A (--show-all).

$ bat -A messy.txt

-A visualiza tabulacoes como ├──▶ e novas linhas como um simbolo tipo . E otimo para resolver problemas de "espacos em branco invisiveis quebram meu script". Mesmo proposito que cat -A, mas a cor torna mais claro.

5. Como Personalizar a Exibicao?

Conclusao: Escolha quais partes mostrar com --style (numbers / header / grid / changes, etc.), e mude as cores com --theme. Liste os temas disponiveis com --list-themes.

Lina: Posso escolher de forma granular, tipo "quero numeros de linha mas nao a grade"?
Veterano Linny: Pode. Com --style voce especifica os componentes a mostrar, separados por virgula.
# Apenas numeros de linha (sem grade, sem cabecalho)
$ bat --style=numbers config.json

# Apenas numeros de linha e marcadores de mudanca Git
$ bat --style=numbers,changes config.json

# Remover todas as decoracoes (mesmo que -p)
$ bat --style=plain config.json

Principais Componentes do --style

Valor Significado
numbers Numeros de linha
header Cabecalho com nome do arquivo
grid Linhas de grade separadoras
changes Marcadores de mudanca Git
full Tudo (padrao)
plain Nada (equivalente a -p)

Mude o tema de cores com --theme. Liste os temas disponiveis com --list-themes.

# Ver a lista de temas
$ bat --list-themes

# Exibir com um tema escolhido
$ bat --theme=ansi config.json

Tornar Configuracoes Permanentes

Se digitar opcoes toda vez e cansativo, escreva padroes em um arquivo de configuracao. Gere um template com bat --generate-config-file, defina seu --theme e --style padrao la, e a partir de entao um bat simples aplica essas configuracoes.

6. Como Visualizar ou Realcar Linhas Especificas?

Conclusao: Especifique um intervalo de linhas com -r (--line-range) como inicio:fim. Destaque uma linha especifica com -H (--highlight-line). Force uma linguagem com -l (--language).

Lina: Para um log com milhares de linhas, como eu vejo apenas um intervalo especifico?
Veterano Linny: Voce pode especificar um intervalo de linhas com -r. Sem necessidade de tail ou sed -- bat sozinho recorta.
# Mostrar linhas 100 ate 120
$ bat -r 100:120 app.log

# Da linha 50 ate o final
$ bat -r 50: app.log

# Do inicio ate a linha 30
$ bat -r :30 app.log

Para destacar uma linha especifica com cor, use -H.

# Exibir o arquivo inteiro enquanto realca a linha 42
$ bat -H 42 app.log

Quando a linguagem nao e detectada automaticamente (para arquivos sem extensao, por exemplo), especifique com -l.

# Realcar um arquivo sem extensao como JSON
$ bat -l json mydata
Lina: Entao a razao de um arquivo sem extensao nao ter cor era que a linguagem nao pdia ser determinada.
Veterano Linny: Certo. bat adivinha a linguagem pela extensao e conteudo, mas pode errar. Quando erra, -l diz "isto e JSON." Veja as linguagens suportadas com bat --list-languages.

7. O Que Observar em Pipes e Scripts?

Conclusao: Quando a saida vai para um pipe ou arquivo, bat automaticamente remove decoracoes e emite texto simples. Mesmo assim, nao e um substituto perfeito do cat, entao prefira cat em scripts.

Lina: Executei bat config.json | grep debug e funcionou normalmente. Os codigos de cor nao se misturaram.
Veterano Linny: Boa observacao. bat verifica se a saida e um terminal (a tela), e quando voce faz pipe ou redireciona para um arquivo, ele desativa automaticamente decoracoes e cor. Entao passa-lo para grep ou wc nao quebra nada.
# Pipe resulta em texto simples automaticamente
$ bat config.json | grep debug

# Redirecionar para um arquivo nao insere codigos de cor
$ bat config.json > copy.json

Use cat em Scripts

bat e pratico, mas nao esta instalado em todo lugar. Se um shell script assume bat, ele quebra em uma maquina que nao o tem. Em scripts que voce distribui ou compartilha, use cat simples para processamento que nao precisa de decoracao. Trate bat estritamente como uma ferramenta para "quando um humano esta olhando."

Lina: E sobre alias cat=bat para substituir cat completamente?
Veterano Linny: Entendo a vontade, mas nao recomendo. Scripts e runbooks de outras pessoas podem depender do comportamento simples do cat, entao sobrescreve-lo com um alias pode causar surpresas. Se for o caso, adicione com um nome separado, como alias bat='batcat'.

8. Quais Sao os Extras Praticos?

Conclusao: bat tambem pode colorir paginas man e alimentar previews em ferramentas como fzf. Onde voce quiser "mostrar conteudo com cor", pode inseri-lo.

Veterano Linny: Ja que estamos aqui, deixe-me mostrar alguns usos alem de executar bat sozinho. Silenciosamente eficazes uma vez configurados.

Para colorir paginas man com bat, defina a variavel de ambiente MANPAGER. Adicione esta linha ao ~/.bashrc.

export MANPAGER="sh -c 'col -bx | bat -l man -p'"

Como Ler

  • col -bx: limpa caracteres de controle na saida do man (como negrito baseado em overstrike)
  • bat -l man -p: coloriza usando as regras da linguagem man e exibe de forma simples (-p)
  • Apos configurar, abrir man ls e similares colore cabecalhos e opcoes para leitura mais facil

Usado como preview no fzf (um buscador fuzzy), ele mostra conteudo de arquivos candidatos com cor.

# Escolher um arquivo enquanto visualiza seu conteudo com cor
$ fzf --preview 'bat --color=always {}'
Lina: Por que adicionar --color=always?
Veterano Linny: O painel de preview do fzf pode ser interpretado como "nao e um terminal", e sozinho, bat removeria a cor. Entao voce diz explicitamente "sempre colorize." Por outro lado, em pipes normais voce nao adiciona -- essa e a troca a aprender.

9. Mini Exercicios: Experimente na Sua Maquina

Conclusao: Tres exercicios -- exibir, remover decoracoes e intervalo de linhas -- para fixar o basico do bat.

Veterano Linny: Para fixar, execute estes no seu proprio sistema.

Exercicio 1: Abra um arquivo de configuracao (ex: ~/.bashrc) com bat e confirme que mostra numeros de linha e cor.

Exercicio 2: Abra o mesmo arquivo com bat -pp e confirme que as decoracoes e o pager sumiram, igualando ao cat.

Exercicio 3: Execute bat -r 1:10 ~/.bashrc e confirme que apenas as primeiras 10 linhas sao mostradas.

Dica para Exercicio 1
bat ~/.bashrc

Sucesso se voce ver numeros de linha a esquerda, um cabecalho com nome do arquivo no topo e realce de sintaxe de shell script.

Dica para Exercicio 2
bat -pp ~/.bashrc

Os numeros de linha, cabecalho e grade desaparecem, o pager nao abre e imprime tudo de uma vez -- quase identico a cat ~/.bashrc (apenas a cor permanece no terminal).

Dica para Exercicio 3
bat -r 1:10 ~/.bashrc

O formato e inicio:fim. Tambem tente bat -r 5: file (da linha 5) e bat -r :5 file (primeiras 5 linhas) para se familiarizar com intervalos.

Proximas Leituras