El prompt: qué información codifica tu terminal

Antes de escribir un solo comando, la shell ya te está diciendo cinco cosas a la vez. Esa línea que aparece esperando tu entrada no es decorativa: es un panel de estado comprimido. Entender qué significa cada parte evita errores concretos —como ejecutar algo como root cuando no deberías, o modificar archivos en el servidor equivocado.

El prompt es la cadena de texto que la shell imprime cada vez que está lista para recibir una instrucción. Su forma por defecto en Debian, con Bash, es:

usuario@hostname:~/directorio$

Cada fragmento viene de una variable que la shell evalúa en tiempo real, justo antes de mostrarte el cursor. La variable que controla todo esto se llama PS1 (Prompt String 1). Cuando ejecutas un comando y termina, Bash re-evalúa PS1 y vuelve a pintar el prompt —por eso el directorio siempre refleja dónde estás en ese momento, no dónde estabas cuando abriste la terminal.

¿Por qué importa conocer esto? Porque el prompt es tu primera línea de defensa contra errores de contexto. Si no miras quién eres, dónde estás y en qué máquina estás, tarde o temprano ejecutas rm -rf en el directorio equivocado o en el servidor de producción en lugar del de pruebas. No es hipérbole: es el accidente más común en administración de sistemas.

Si modificas PS1 de forma incorrecta —una secuencia de escape mal cerrada, por ejemplo— el prompt puede volverse ilegible o hacer que las líneas se sobreescriban entre sí. No rompe la shell, pero la hace prácticamente unusable hasta que corriges la variable o abres una nueva sesión.

Anatomía completa en un ejemplo real

# Veamos qué hay dentro de PS1 ahora mismo
echo $PS1

# Ejemplo de lo que Debian configura por defecto en ~/.bashrc para usuarios normales:
# \u@\h:\w\$
# Cada secuencia de escape tiene un significado:
#   \u  → nombre del usuario actual
#   \h  → hostname (hasta el primer punto, útil en servidores)
#   \w  → directorio de trabajo actual (~ si es el home)
#   \$  → imprime $ si eres usuario normal, # si eres root

# Comprueba el símbolo final en tu sesión actual
whoami          # te dice quién eres
hostname        # te dice en qué máquina estás
pwd             # te dice en qué directorio estás (lo mismo que \w en el prompt)

# Abre una sesión como root y observa cómo cambia el símbolo
# (en un sistema de prueba, nunca en producción sin necesidad)
sudo -i
# El prompt ahora termina en #, no en $
# Sal inmediatamente después de comprobarlo
exit

# Añade información del último comando al prompt: verde si tuvo éxito, rojo si falló
# Pega esto en ~/.bashrc para que persista entre sesiones
PS1='\[\e[0;32m\]\u@\h\[\e[0m\]:\[\e[0;34m\]\w\[\e[0m\]\$ '

# Para ver el efecto sin abrir una sesión nueva:
source ~/.bashrc

# Ahora ejecuta algo que falle para ver que el prompt no cambia de color por sí solo
# (el color en este ejemplo es estático; el color dinámico requiere una función)
ls /ruta/que/no/existe
echo $?   # imprime el código de salida: 0 = éxito, cualquier otro número = fallo

# Un prompt con color dinámico según el código de salida del último comando:
PS1='$(if [ $? -eq 0 ]; then echo "\[\e[0;32m\]"; else echo "\[\e[0;31m\]"; fi)\u@\h\[\e[0m\]:\w\$ '
source ~/.bashrc

# Comprueba que git muestra la rama si estás dentro de un repositorio
# (requiere que __git_ps1 esté disponible, viene con bash-completion en Debian)
sudo apt install bash
# bash-completion ya incluye __git_ps1 vía /usr/lib/git-core/git-sh-prompt
# Actívalo en ~/.bashrc:
# source /usr/lib/git-core/git-sh-prompt
# PS1='\u@\h:\w$(__git_ps1 " (%s)")\$ '

Lo que está pasando línea a línea

echo $PS1 raramente imprime lo que esperas a primera vista: verás secuencias como \[\e[0;32m\] que son códigos de escape ANSI envueltos en \[ y \]. Los corchetes no son decoración —le dicen a Bash que esos caracteres no ocupan espacio visual en la línea. Sin ellos, la shell cuenta mal la longitud del prompt y el cursor se desplaza al lugar equivocado cuando usas el historial con las flechas.

El fragmento \u@\h:\w\$ es la esencia del prompt de Debian. Fíjate en \$ con barra invertida: eso es lo que produce el cambio automático entre $ y #. Bash evalúa internamente si $EUID es 0 (root) y elige el símbolo correspondiente. No necesitas configurarlo tú —viene así de fábrica, y es exactamente la distinción visual que te salva de confundir una sesión root con una normal cuando tienes varias terminales abiertas.

El bloque con if [ $? -eq 0 ] dentro de PS1 usa una característica importante: cuando PS1 contiene una sustitución de comando entre comillas simples ('...'), Bash la re-evalúa cada vez que va a mostrar el prompt. Con comillas dobles la evaluaría una sola vez al cargar .bashrc y el color nunca cambiaría. Las comillas simples aquí no son un descuido —son el mecanismo.

El source ~/.bashrc recarga la configuración en la sesión actual sin cerrarla. Es el equivalente a “aplicar cambios sin reiniciar”. Si algo sale mal y el prompt queda roto, escribe PS1='\u@\h:\w\$ ' a ciegas y pulsa Enter —eso restaura un prompt funcional mínimo aunque no veas bien lo que escribes.

Respecto a Git: __git_ps1 es una función de shell que viene en /usr/lib/git-core/git-sh-prompt. Cuando la añades al prompt y entras en un repositorio, ves directamente en qué rama estás sin necesidad de ejecutar git branch. En entornos donde manejas varias ramas en paralelo, esa información en el prompt evita commits en la rama equivocada.

13

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio