bat: Um Clone do cat com Realce de Sintaxe

bat: Um Clone do cat com Realce de Sintaxe

O que você vai conseguir fazer

  • Exibir arquivos com cor e números de linha usando `bat`
  • Resolver sozinho o problema de nome `batcat` no Ubuntu
  • Remover decorações com `-p` e `-pp` para igualar a saída do `cat`

Pré-requisitos (leia estes primeiro)

O Que Você Vai Aprender

  • Como usar bat em vez de cat para exibir arquivos com cor e números de linha
  • Como corrigir o problema batcat no Ubuntu/Debian (o comando não se chama bat)
  • Como remover decorações para igualar a saída do cat em pipes e scripts
  • Extras práticos como colorir páginas man que compensam no dia a dia

Público-Alvo: Iniciantes em Linux, qualquer pessoa insatisfeita com a saída simples do cat

As palavras usadas aqui (organizadas antes)

  • Realce de sintaxe: colorir o texto conforme a gramática. "Colorir o código" quer dizer o mesmo.
  • Pager: uma ferramenta que mostra um arquivo longo uma tela por vez. O less é o clássico.
  • Saída padrão: para onde vai o resultado de um comando. Normalmente é a sua tela.
  • Pipe: o símbolo |. Ele entrega o resultado do comando da esquerda ao comando da direita.
  • Symlink: um atalho que aponta para a mesma coisa com outro nome.
  • PATH: a lista de lugares onde o shellUm programa interativo que interpreta os comandos digitados e os executa. procura comandos. Um comando fora desses lugares não pode ser chamado só pelo nome.

Introdução: O Problema de Lina "cat É Difícil de Ler"

Lina: Linny-senpai, abri um arquivo de configuração com cat config.json, mas tudo é da mesma cor e meus olhos simplesmente escorregam. Reabrir em um editor também é trabalhoso.
Veterano Linny: Ah, o cat apenas "despeja o conteúdo como está" -- sem cor, sem números de linha. Existe um cat melhorado chamado bat que torna tudo legível de uma só vez.
Lina: bat? Como o animal?
Veterano Linny: Escrito b-a-t, sim. É um trocadilho com cat. Realce de sintaxe, números de linha, até marcadores de diff Git -- tudo embutido desde o início. Vamos aprender juntos hoje.

A Resposta Curta

  • bat = um substituto do cat com cor, números de linha, diffs Git e paginação automática prontos para uso
  • No Ubuntu/Debian, sudo apt install bat instala, mas o comando é batcat (criar alias para bat é padrão)
  • Para pipes e scripts, bat -p (sem decorações) / bat -pp (sem pager também) retornam ao comportamento estilo cat

1. O Que É o bat?

Conclusão: bat é um substituto do cat. Exibe conteúdo de arquivos como o cat, mas adiciona realce de sintaxe, números de linha, marcadores de mudança Git e paginação automática.

Lina: O que é realmente diferente entre bat e cat?
Veterano Linny: Eles fazem o mesmo trabalho -- "mostrar o conteúdo de um arquivo." A diferença é a legibilidade. Onde cat transmite texto simples em preto e branco, bat colore a sintaxe, adiciona números de linha e até marca linhas alteradas quando você está em um repositório Git.
Lina: Tão 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. Porém, não é um substituto perfeito, então você precisa de um pouco de cuidado em pipes e scripts. Vamos cobrir isso depois.

bat é uma ferramenta em Rust desenvolvida por sharkdp/bat. As principais diferenças do cat:

Aspecto cat bat
Realce de sintaxe Nenhum Sim (detecta a linguagem automaticamente)
Números de linha Com -n Ativado por padrão
Exibição de diff Git Nenhuma Sim (marca linhas alteradas)
Arquivos longos Rola tudo Abre automaticamente less (pager)
Caracteres não imprimíveis -A simboliza -A simboliza
Comportamento em pipe Sempre texto simples Desativa decorações automaticamente (depois)

2. Instalação e o Problema batcat

Conclusão: No Ubuntu/Debian, apt install bat funciona, mas o comando se chama batcat para evitar conflito de nomes. Criar um symlink para bat é a correção padrão.

Lina: Quero instalar agora. Como?
Veterano Linny: O nome do pacote difere ligeiramente por distribuição. Vamos começar 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 É batcat

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

Lina: Senpai, o sudo apt install bat deu certo. Mas bat config.json responde bat: command not found. A instalação falhou?
Veterano Linny: Não falhou. Ele está instalado. O comando só se chama batcat. Tente batcat --version.
Lina: Ah, funcionou! Então ele estava lá o tempo todo, só com outro nome.
Veterano Linny: Isso. Quase todo mundo tropeça aqui uma vez. É o mesmo padrão do problema fdfind com fd. Adicione um symlink e você pode chamá-lo como bat.

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

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

O -f está ali para o comando continuar funcionando mesmo se já existir um link com esse nome.

Primeiro confira se ~/.local/bin está no seu PATH.

$ echo $PATH

Se /home/usuario/.local/bin aparecer na saída, você pode pular o próximo passo. Continue apenas se ele não estiver lá.

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

Não confunda >> com >

  • >> acrescenta no fim. O que já estava lá continua
  • > apaga o arquivo e reescreve. Usar > aqui apaga tudo do ~/.bashrc
  • O conteúdo apagado não volta. Nada vai para a lixeira
  • Isto edita um arquivo de configuração real da sua máquina. O bat não roda no terminal virtual deste site, então execute-o no terminal da sua máquina
  • Faça uma cópia antes de executar
$ cp ~/.bashrc ~/.bashrc.bak
  • Se digitar > por engano, restaure com cp ~/.bashrc.bak ~/.bashrc

O que o source faz

O ~/.bashrc é lido "quando você abre um terminal novo". Apenas acrescentar nele não afeta o terminal que já está aberto. source ~/.bashrc diz "releia agora". Abrir um terminal novo tem o mesmo efeito.

Confirme a instalação e versão:

$ bat --version
bat 0.24.0

O número varia conforme o sistema. Qualquer versão exibida significa que a instalação deu certo.

Se Você Pular o Symlink no Ubuntu

Se o symlink parece trabalhoso, você 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 documentações diretamente, o que é mais conveniente.

3. O Básico de Usar o bat

Conclusão: bat NOMEDOARQUIVO mostra o conteúdo com cor e números de linha. Passe múltiplos arquivos e ele os separa com cabeçalhos rotulados.

Veterano Linny: O uso é idêntico ao cat -- basta passar o nome do arquivo que você quer exibir. Vamos criar um arquivo para testar as cores.
$ mkdir -p ~/bat-practice
$ cd ~/bat-practice
$ printf '{\n  "name": "penguin",\n  "version": "1.0.0",\n  "debug": false\n}\n' > config.json
$ bat config.json
───────┬────────────────────────────────────────
       │ File: config.json
───────┼────────────────────────────────────────
   1   │ {
   2   │   "name": "penguin",
   3   │   "version": "1.0.0",
   4   │   "debug": false
   5   │ }
───────┴────────────────────────────────────────

Como Ler a Saída

  • Os números à esquerda: números de linha (equivalente ao cat -n, ativado por padrão)
  • O File: config.json no topo: o cabeçalho com o nome do arquivo
  • As cores: a linguagem é detectada automaticamente pela extensão e realçada sintaticamente (JSON acima)

Passe múltiplos arquivos e cada um recebe seu próprio cabeçalho como separador.

$ bat a.txt b.txt
Lina: Com cat a.txt b.txt os conteúdos se misturavam e eu não conseguia saber onde b.txt começava.
Veterano Linny: Certo, esse é um ponto silenciosamente útil. bat insere um cabeçalho por arquivo, então verificar múltiplos arquivos fica muito mais fácil.

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. Você não vai perder sua posição com o scroll desenfreado estilo cat.

4. Como Tornar Simples Como o cat?

Conclusão: Para remover decorações (números de linha, cabeçalho, linhas de grade), use -p (--plain). Para também parar o pager e se comportar quase como cat, use -pp.

Lina: A cor e os números de linha são legais, mas às vezes as linhas de grade e os números atrapalham quando eu só quero copiar o conteúdo.
Veterano Linny: Boa observação. Para isso, existem opções para remover as decorações -- dois níveis delas, dependendo do que você 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 Níveis de Remoção de Decorações

Opção O que é removido O que permanece
-p Números de linha, cabeçalho, grade Cor, paginação automática
-pp Tudo acima + paginação automática Cor (em um terminal)
Lina: Então -p duas vezes é -pp. Fácil de lembrar.
Veterano Linny: Exatamente. -pp significa "sem decorações, sem pager", então é um substituto fácil para o cat. É a escolha ideal quando você só quer dar uma olhada rápida no conteúdo.

Para inspecionar caracteres não imprimíveis (tabulações, fins de linha, espaços finais), use -A (--show-all).

$ bat -A messy.txt

-A visualiza tabulações como ├──▶ e novas linhas como um símbolo tipo . É ótimo para resolver problemas de "espaços em branco invisíveis quebram meu script". Mesmo propósito que cat -A, mas a cor torna mais claro.

5. Como Personalizar a Exibição?

Conclusão: Escolha quais partes mostrar com --style (numbers / header / grid / changes, etc.), e mude as cores com --theme. Liste os temas disponíveis com --list-themes.

Lina: Posso escolher de forma granular, tipo "quero números de linha mas não a grade"?
Veterano Linny: Pode. Com --style você especifica os componentes a mostrar, separados por vírgula.
# 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 Números de linha
header Cabeçalho com nome do arquivo
grid Linhas de grade separadoras
changes Marcadores de mudança Git
full Tudo
plain Nada (equivalente a -p)

Mude o tema de cores com --theme. Liste os temas disponíveis com --list-themes.

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

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

Tornar Configurações Permanentes

Se digitar opções toda vez é cansativo, escreva padrões em um arquivo de configuração. Gere um template com bat --generate-config-file, defina seu --theme e --style padrão lá, e a partir de então um bat simples aplica essas configurações.

6. Como Visualizar ou Realçar Linhas Específicas?

Conclusão: Especifique um intervalo de linhas com -r (--line-range) como inicio:fim. Destaque uma linha específica com -H (--highlight-line). Force uma linguagem com -l (--language).

Lina: Para um log com milhares de linhas, como eu vejo apenas um intervalo específico?
Veterano Linny: Você 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 específica com cor, use -H.

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

Quando a linguagem não é detectada automaticamente (para arquivos sem extensão, por exemplo), especifique com -l.

# Realcar um arquivo sem extensao como JSON
$ bat -l json mydata
Lina: Então a razão de um arquivo sem extensão não ter cor era que a linguagem não pdia ser determinada.
Veterano Linny: Certo. bat adivinha a linguagem pela extensão e conteúdo, mas pode errar. Quando erra, -l diz "isto é JSON." Veja as linguagens suportadas com bat --list-languages.

7. O Que Observar em Pipes e Scripts?

Conclusão: Quando a saída vai para um pipe ou arquivo, bat automaticamente remove decorações e emite texto simples. Mesmo assim, não é um substituto perfeito do cat, então prefira cat em scripts.

Lina: Executei bat config.json | grep debug e funcionou normalmente. Os códigos de cor não se misturaram.
Veterano Linny: Boa observação. bat verifica se a saída é um terminal (a tela), e quando você faz pipe ou redireciona para um arquivo, ele desativa automaticamente decorações e cor. Então passá-lo para grep ou wc não 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 é prático, mas não está instalado em todo lugar. Se um shell script assume bat, ele quebra em uma máquina que não o tem. Em scripts que você distribui ou compartilha, use cat simples para processamento que não precisa de decoração. Trate bat estritamente como uma ferramenta para "quando um humano está olhando."

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

8. Quais São os Extras Práticos?

Conclusão: bat também pode colorir páginas man e alimentar previews em ferramentas como fzf. Onde você quiser "mostrar conteúdo com cor", pode inseri-lo.

Veterano Linny: Já que estamos aqui, deixe-me mostrar alguns usos além de executar bat sozinho. Silenciosamente eficazes uma vez configurados.

Para colorir páginas man com bat, defina a variável de ambienteUm valor nomeado que o shell ou um programa pode consultar durante a execução. MANPAGER. Adicione esta linha no fim do ~/.bashrc e releia com source ~/.bashrc.

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

No Ubuntu / Debian sem o symlink, troque o bat acima por batcat. Se esquecer, o man não mostra nada ao ser aberto. O mesmo vale para o exemplo do fzf abaixo.

Como Ler

  • col -bx: limpa caracteres de controle na saída do man (como negrito baseado em overstrike)
  • bat -l man -p: coloriza usando as regras da linguagem man e exibe de forma simples (-p)
  • Após configurar, abrir man ls e similares colore cabeçalhos e opções para leitura mais fácil

Usado como preview no fzf (um buscador fuzzy), ele mostra conteúdo 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 "não é um terminal", e sozinho, bat removeria a cor. Então você diz explicitamente "sempre colorize." Por outro lado, em pipes normais você não adiciona -- essa é a troca a aprender.

9. Mini Exercícios: Experimente na Sua Máquina

Conclusão: Três exercícios -- exibir, remover decorações e intervalo de linhas -- para fixar o básico do bat.

Veterano Linny: Para fixar, execute estes no seu próprio sistema.

Estes exercícios apenas leem o ~/.bashrc. Nada é gravado, então pode ficar tranquila.

Exercício 1: Abra o ~/.bashrc com bat e confirme que mostra números de linha e cor.

Ver Dica 1 (Direção)

O uso é o mesmo do cat. Basta passar o nome do arquivo; não precisa de opções.

Ver Dica 2 (Nome do comando)

Rode bat ~/.bashrc. No Ubuntu sem o symlink, leia como batcat.

Ver Resposta
$ bat ~/.bashrc

Aparecem números de linha à esquerda e um cabeçalho com o nome do arquivo no topo. Se houver realce de sintaxe de shell script, deu certo. Se o arquivo for longo, o pager abre; saia com q.

Exercício 2: Abra o mesmo arquivo de modo que as decorações e o pager sumam, igualando ao cat.

Ver Dica 1 (Direção)

Repita duas vezes a opção que remove decorações. Uma vez só ainda deixa a cor e o pager.

Ver Dica 2 (Nome do comando)

Rode bat -pp ~/.bashrc.

Ver Resposta
$ bat -pp ~/.bashrc

Números de linha, cabeçalho e grade desaparecem. O pager não abre e tudo sai de uma vez — quase idêntico a cat ~/.bashrc (apenas a cor permanece no terminal).

Exercício 3: Mostre apenas as primeiras 10 linhas do ~/.bashrc.

Ver Dica 1 (Direção)

Existe uma opção para intervalo de linhas. Você escreve como inicio:fim.

Ver Dica 2 (Nome do comando)

Use bat -r. Começando do topo, você pode omitir o início.

Ver Resposta
$ bat -r 1:10 ~/.bashrc

bat -r :10 ~/.bashrc dá o mesmo resultado. Tente também bat -r 5: ~/.bashrc (a partir da linha 5) para se familiarizar com intervalos.

Retomando

Conclusão: bat para olhar arquivos, cat para entregar arquivos a outro programa.

Lina: Vou resumir. Leio com bat, uso -pp quando quero copiar e -r para limitar o trecho.
Veterano Linny: Bom resumo. Mais uma: dentro de scripts, use cat. Lembre do bat como a ferramenta de "quando um humano está olhando" e você não se perde.
Lina: E o command not found no Ubuntu não me assusta mais. O comando só se chama batcat.

Resumo em Três Linhas

Conclusão: bat é o substituto legível do cat, e o -pp devolve a saída simples.

  1. bat NOMEDOARQUIVO mostra o arquivo com cor e números de linha
  2. Se o Ubuntu disser bat: command not found, o comando só se chama batcat
  3. Use -pp para pipes e para copiar. Em scripts, fique com o cat puro

Próximas Leituras