Produtividade no Shell
Aliases, funções de shell e truques de histórico para desenvolvedores Python que usam bash/zsh - git, uv, pytest e SSH mais rápidos sem memorizar todas as flags.
Receita
# ~/.bashrc ou ~/.zshrc
alias gs='git status -sb'
alias uvr='uv run'
alias pyt='uv run pytest -q'
gco() { git checkout "$@"; }Quando usar isso:
- Sequências de comandos diárias repetidas
- Padronização de atalhos da equipe em documentação de onboarding
- Recuperação do pipeline
curl | jqda semana passada a partir do histórico - Seleção fuzzy de branch git antes do rebase
Exemplo de Trabalho
# Trechos de ~/.zshrc para monorepo Python
export PATH="$HOME/.local/bin:$PATH"
alias uvs='uv sync'
alias uvt='uv run pytest -q'
alias ruffc='uv run ruff check .'
alias rufff='uv run ruff format .'
# Padrão de função de smoke test commitado - promova para bin/smoke.sh quando compartilhado
billing-smoke() {
set -euo pipefail
curl -sf http://localhost:8000/health
curl -sf http://localhost:8000/ready
echo "smoke ok"
}
# Checkout git fzf (requer fzf)
alias gcb='git branch | fzf | xargs git checkout'O que isso demonstra:
- Aliases curtos para
uv/ruff/pytestde alta frequência - Função com
set -euo pipefailpara testes de fumaça - Integração fzf para seleção de branch
- PATH inclui ferramentas pipx/uv
Mergulho Profundo
Como Funciona
- Alias - Substituição simples de string; sem lógica de argumentos.
- Função - Função Bash/zsh suporta argumentos e variáveis locais.
- Histórico -
HISTSIZE,HISTFILESIZE,histappendpara persistência. - fzf - Buscador fuzzy sobre qualquer lista (arquivos, branches, histórico).
Ferramentas de Produtividade
| Ferramenta | Propósito |
|---|---|
fzf | Seleção fuzzy de arquivos, branches |
direnv | Carrega .envrc automaticamente por diretório de projeto |
zoxide | z billing para pular para diretório frecent |
starship | Prompt cross-shell com indicador de venv |
Notas Python
# Mostrar venv ativo no prompt - módulo python do starship ou:
export PS1='($(basename $VIRTUAL_ENV)) \u@\h:\w$ '
# Busca no histórico para trás com rg
bind '"\C-r": reverse-search-history' # padrão bashArmadilhas
- Alias substituindo binários -
alias ls='ls --color'OK; mascararpythoné perigoso. Correção: evite alias empython,rm,git push. - Funções sem pipefail - Falha parcial silenciosa. Correção:
set -euo pipefailno topo. - Segredos no histórico -
curl -H "Authorization: Bearer ..."salvo. Correção: padrãoHISTIGNOREou prefixo de espaço +HISTCONTROL=ignorespace. - Copiar aliases pessoais para servidores de produção - Ruído em contas compartilhadas. Correção: aliases mínimos em produção; scripts em
/opt/app/bin. - Zsh vs bash em docs de CI - Onboarding mostra bash; dev usa zsh. Correção: documentar ambos ou padronizar.
.bashrcenorme lentifica SSH - Carregar plugins sob demanda no estilo nvm. Correção: dividir em~/.bashrc.d/opcionais.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
Makefile make test | Equipe quer uma interface | Desenvolvedores Windows sem make |
Runner just | Receitas de comando ricas | Política de zero dependências extras |
| Tarefas IDE | Desenvolvedores focados em GUI | Operadores apenas SSH |
| CLI Dedicada (Typer) | Subcomandos complexos | Alias simples é suficiente |
FAQs
bash ou zsh para desenvolvimento Python?
Ambos são bons no macOS/Linux - zsh é o padrão no macOS; garanta que os scripts sejam compatíveis com bash para CI.
direnv com uv?
.envrc com layout uv ou source .venv/bin/activate automático ao cd.
Compartilhar aliases da equipe?
Documentar no docs/shell.md do repositório - não forçar dotfiles via repositório sem opt-in.
Timestamp no histórico?
export HISTTIMEFORMAT='%F %T ' no bash para quando você executou aquele comando de migração.
gitignore global?
git config --global core.excludesfile ~/.gitignore_global para .DS_Store, .idea.
Ctrl-r não funciona?
Verificar bindkey no zsh; instalar o pacote de keybindings do fzf.
Completar tab para uv?
uv generate-shell-completion zsh >> diretório de completion do ~/.zshrc.
Alias em SSH não interativo?
Aliases geralmente são desabilitados - use comandos completos em cron/systemd.
Oh My Zsh lento?
Desabilitar plugins não utilizados; apenas o starship é mais leve.
Quando um alias se torna um script?
Quando ele tem argumentos, tratamento de erros, ou é compartilhado pela equipe - mova para bin/ com testes.
Relacionados
- Python no Shell - uv e venv
- Configuração do Git - aliases git
- Checklist de Configuração de Ambiente - configuração do shell
- Scripts Robustos - disciplina bash
Versões do Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.