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
batem vez decatpara exibir arquivos com cor e números de linha - Como corrigir o problema
batcatno Ubuntu/Debian (o comando não se chamabat) - Como remover decorações para igualar a saída do
catem pipes e scripts - Extras práticos como colorir páginas
manque 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"
cat config.json, mas tudo é da mesma cor e meus olhos simplesmente escorregam. Reabrir em um editor também é trabalhoso.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.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 docatcom cor, números de linha, diffs Git e paginação automática prontos para uso- No Ubuntu/Debian,
sudo apt install batinstala, mas o comando ébatcat(criar alias parabaté padrão) - Para pipes e scripts,
bat -p(sem decorações) /bat -pp(sem pager também) retornam ao comportamento estilocat
1. O Que É o bat?
Conclusão:
baté um substituto docat. Exibe conteúdo de arquivos como ocat, mas adiciona realce de sintaxe, números de linha, marcadores de mudança Git e paginação automática.
bat e cat?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.cat?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 batfunciona, mas o comando se chamabatcatpara evitar conflito de nomes. Criar um symlink parabaté a correção padrão.
# 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.
sudo apt install bat deu certo. Mas bat config.json responde bat: command not found. A instalação falhou?batcat. Tente batcat --version.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
batnã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 comcp ~/.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 NOMEDOARQUIVOmostra o conteúdo com cor e números de linha. Passe múltiplos arquivos e ele os separa com cabeçalhos rotulados.
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.jsonno 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
cat a.txt b.txt os conteúdos se misturavam e eu não conseguia saber onde b.txt começava.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 comocat, use-pp.
# 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) |
-p duas vezes é -pp. Fácil de lembrar.-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.
--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) comoinicio:fim. Destaque uma linha específica com-H(--highlight-line). Force uma linguagem com-l(--language).
-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
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,
batautomaticamente remove decorações e emite texto simples. Mesmo assim, não é um substituto perfeito docat, então prefiracatem scripts.
bat config.json | grep debug e funcionou normalmente. Os códigos de cor não se misturaram.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."
alias cat=bat para substituir cat completamente?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:
battambém pode colorir páginasmane alimentar previews em ferramentas comofzf. Onde você quiser "mostrar conteúdo com cor", pode inseri-lo.
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 doman(como negrito baseado em overstrike)bat -l man -p: coloriza usando as regras da linguagemmane exibe de forma simples (-p)- Após configurar, abrir
man lse 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 {}'--color=always?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.
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.
bat, uso -pp quando quero copiar e -r para limitar o trecho.cat. Lembre do bat como a ferramenta de "quando um humano está olhando" e você não se perde.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
-ppdevolve a saída simples.
bat NOMEDOARQUIVOmostra o arquivo com cor e números de linha- Se o Ubuntu disser
bat: command not found, o comando só se chamabatcat - Use
-pppara pipes e para copiar. Em scripts, fique com ocatpuro