Generador de prompts de shell
Crea un prompt para bash o zsh y cópialo en un solo bloque
Activa las partes que quieras: nombre de usuario, host, directorio de trabajo, rama de git, código de salida del último comando y virtualenv de Python. Después, elige un color para cada una y observa cómo queda el prompt a medida que lo cambias. El resultado es un bloque que puedes pegar directamente en ~/.bashrc o ~/.zshrc. Los códigos de color se marcan como no imprimibles para que una línea de comandos larga no salte de línea en el lugar equivocado, la rama de git desaparece cuando estás fuera de un repositorio y el código de salida se captura antes de que el prompt pueda sobrescribirlo. Todo se ejecuta en tu navegador y no necesitas iniciar sesión.
# BootSignal prompt, add this to ~/.bashrc
bs_git_branch() {
local b=$(git branch --show-current 2>/dev/null)
[ -n "$b" ] && printf ' (%s)' "$b"
}
PS1='\[\e[1;32m\]\u\[\e[0m\]@\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]\[\e[1;35m\]$(bs_git_branch)\[\e[0m\] \[\e[1m\]\$\[\e[0m\] 'Todo se genera en tu navegador, sin subir datos. Pega primero el bloque en tu intérprete de comandos para probarlo y, cuando te guste el resultado, añádelo a tu archivo de configuración.
Preguntas
- ¿Dónde pongo esto?
- Añade el bloque al final de ~/.bashrc (bash) o ~/.zshrc (zsh) y después ejecuta source ~/.bashrc o abre una nueva terminal. En macOS, bash suele leer ~/.bash_profile en su lugar.
- ¿Por qué los códigos de color van entre \[ \]?
- Bash cuenta cada carácter de PS1 para determinar dónde está el cursor. Los códigos de color no muestran caracteres, por lo que deben marcarse como no imprimibles; de lo contrario, una línea de comandos larga salta de línea donde no debe y empieza a sobrescribir el prompt. Zsh usa %F y %f en su lugar, que ya reconoce como elementos de ancho cero.
- ¿Por qué la rama de git es una función?
- PS1 no puede ejecutar un condicional por sí solo, así que la función auxiliar no muestra nada cuando estás fuera de un repositorio. Esto evita que aparezcan paréntesis vacíos y separadores sueltos en el prompt; por eso no se coloca ningún separador junto a la rama.
- ¿Por qué el código de salida necesita PROMPT_COMMAND?
- En bash, cualquier sustitución de comandos en el prompt se ejecuta antes de que leas $?, así que el estado que ves es el de esa sustitución. Capturarlo una sola vez en PROMPT_COMMAND conserva el valor real. Zsh incorpora el condicional %(?..) y no necesita ningún hook.