Productividad en la Shell
Alias, funciones de shell y trucos de historial para desarrolladores de Python que trabajan en bash/zsh: git, uv, pytest y SSH más rápidos sin memorizar cada flag.
Receta
# ~/.bashrc o ~/.zshrc
alias gs='git status -sb'
alias uvr='uv run'
alias pyt='uv run pytest -q'
gco() { git checkout "$@"; }Cuándo recurrir a esto:
- Secuencias de comandos diarias repetidas
- Estandarización de atajos del equipo en la documentación de incorporación
- Recuperación del pipeline
curl | jqde la semana pasada desde el historial - Selección difusa de una rama de git antes de un rebase
Ejemplo de Trabajo
# Extractos de ~/.zshrc para monorepo de 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 .'
# Patrón de función de humo confirmado - promocionar a bin/smoke.sh cuando se comparta
billing-smoke() {
set -euo pipefail
curl -sf http://localhost:8000/health
curl -sf http://localhost:8000/ready
echo "smoke ok"
}
# checkout de git con fzf (requiere fzf)
alias gcb='git branch | fzf | xargs git checkout'Lo que esto demuestra:
- Alias cortos para alta frecuencia de uv/ruff/pytest
- Función con
set -euo pipefailpara pruebas de humo - Integración de fzf para selección de ramas
- PATH incluye herramientas de pipx/uv
Profundización
Cómo Funciona
- Alias - Sustitución simple de cadenas; sin lógica de argumentos.
- Función - La función de Bash/zsh soporta argumentos y variables locales.
- Historial -
HISTSIZE,HISTFILESIZE,histappendpara persistencia. - fzf - Buscador difuso sobre cualquier lista (archivos, ramas, historial).
Herramientas de Productividad
| Herramienta | Propósito |
|---|---|
fzf | Selección difusa de archivos, ramas |
direnv | Carga automática de .envrc por directorio de proyecto |
zoxide | Salto z billing al directorio más frecuente |
starship | Prompt multiplataforma con indicador de venv |
Notas de Python
# Mostrar venv activo en el prompt - módulo python de starship o:
export PS1='($(basename $VIRTUAL_ENV)) \u@\h:\w$ '
# Búsqueda hacia atrás en el historial para rg
bind '"\C-r": reverse-search-history' # bash por defectoErrores Comunes
- Alias que sobrescriben binarios -
alias ls='ls --color'OK; enmascararpythones peligroso. Solución: evitar alias enpython,rm,git push. - Funciones sin pipefail - Fallo parcial silencioso. Solución:
set -euo pipefailal principio. - Secretos en el historial -
curl -H "Authorization: Bearer ..."guardado. Solución: patrónHISTIGNOREo prefijo de espacio +HISTCONTROL=ignorespace. - Copiar alias personales a servidores de producción - Ruido en cuentas compartidas. Solución: alias mínimos en producción; scripts en
/opt/app/bin. - Zsh vs bash en documentación de CI - La incorporación muestra bash; el desarrollo usa zsh. Solución: documentar ambos o estandarizar.
.bashrcenorme ralentiza SSH - Carga diferida de plugins estilo nvm. Solución: dividir opcionalmente~/.bashrc.d/.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
Makefile make test | El equipo quiere una interfaz | Desarrolladores solo Windows sin make |
Runner just | Recetas de comandos ricas | Política de cero dependencias adicionales |
| Tareas de IDE | Desarrolladores centrados en GUI | Operadores solo SSH |
| CLI Dedicada (Typer) | Subcomandos complejos | Alias simple es suficiente |
Preguntas Frecuentes
¿bash o zsh para desarrollo Python?
Ambos están bien en macOS/Linux - zsh es el predeterminado en macOS; asegúrate de que los scripts sean compatibles con bash para CI.
¿direnv con uv?
.envrc con layout uv o source .venv/bin/activate automáticamente al hacer cd.
¿Compartir alias del equipo?
Documentar en el repositorio docs/shell.md - no forzar dotfiles a través del repositorio sin opt-in.
¿Timestamp del historial?
export HISTTIMEFORMAT='%F %T ' en bash para saber cuándo ejecutaste ese comando de migración.
¿gitignore global?
git config --global core.excludesfile ~/.gitignore_global para .DS_Store, .idea.
¿Ctrl-r no funciona?
Verificar bindkey en zsh; instalar el paquete de atajos de teclado de fzf.
¿Autocompletado Tab para uv?
uv generate-shell-completion zsh >> directorio de completion de ~/.zshrc.
¿Alias en SSH no interactivo?
Los alias a menudo están deshabilitados - usar comandos completos en cron/systemd.
¿Oh My Zsh ralentiza?
Deshabilitar plugins no utilizados; starship solo es más ligero.
¿Cuándo un alias se convierte en script?
Cuando tiene argumentos, manejo de errores, o es compartido por el equipo - mover a bin/ con pruebas.
Relacionado
- Python en la Shell - uv y venv
- Configuración de Git - alias de git
- Lista de Verificación de Configuración del Entorno - configuración de shell
- Scripts Robustos - disciplina de bash
Versiones de la Pila: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 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+, y uv 0.6+.