Linux prompt

PS1

PS1 es lo que se muestra por defecto en el prompt del terminal. Normalmente te muestra el nombre de usuario, el nombre del servidor y el directorio de trabajo. Aunque se puede personalizar (ver parámetros de PSx más bajo).

Para ver cual es la definición actual PS1 ejecutar echo $PS1. Por defecto en muchas distribuciones viene definido como \u@\h:\w\$. Esto no es mas que tu usuario \u, el nombre del servidor \h y el directorio en el que te encuentras \w.

PS2

Cuando quieres escribir un comando muy largo, y utilizas \ para pasar a la siguiente línea de comando, el símbolo > que aparece se corresponde con PS2. Por ejemplo:

$ apt update && \
> apt upgrade

Si quieres ver que contiene PS2, ejecutar echo $PS2.

PS3

Este se utiliza para el operador select dentro de un script en bash. Es difícil encontrarlo directamente en la consola, a menos que efectivamente estés respondiendo a un select de un script.

PS4

Este es el que se utiliza en el modo de depuración. Por tanto, es el que te mostrará cada una de las líneas que se ejecutan cuando estás en modo de depuración.

Parámetros de PSx

  •  El caracter ASCII correspondiente a la campana
  • \d La fecha en formado “Lun Mar 11”
  •  El carácter ASCII correspondiente al escape
  • \h La primera parte del hostname
  • \H El FQDN o hostname completo
  • \j El número de procesos suspendidos
  • \l El nombre del shell, por ejemplo ttyp1
  • Nueva línea
  • Retorno de carro
  • \s Nombre del ejecutable shell, por ejemplo Bash
  • La hora en formato de 24 horas
  • \T La hora en formato de 12 horas
  • \@ La hora en formato AM/PM
  • \u Nombre de usuario
  • La versión de Bash
  • \V La versión de Bash incluyendo el patchlevel
  • \w El directorio actual
  • \W La parte final del directorio actual
  • \! La posición del comando actual en la historia
  • \# El número de instrucción ejectuado
  • \$ Si se es root mostrará # en otro caso, mostrará $
  • \xxx inserta un caracter ASCII definido por los tres dígitos
  • \ inserta una barra invertida
  • \[ aparece para definir una secuencia de caracteres que no mueve el cursor, como pueden ser una definición de colores. Esto es lo que vas a utilizar ahora para darle color a tu terminal.
  • \] Esta secuencia es la que define la finalización de la secuencia de caracteres que empezaste en el punto anterior.

Colores

Para darle color al prompt, la estructura es la siguiente ;y;zm $PS1 

  • Con [ comienzas la secuencia
  • x;y;z definen el formato (x), color de texto (y) y color de fondo (z).
  • m La m marca el dinal de la secuencia.
  •  define el final de la secuencia. Es importante que se defina el final de la secuencia porque si no el texto a continuación del prompt aparecerá en el último color que se haya definido.

La definición de colores se corresponde con la siguiente tabla:

Texto Color texto Color fondo
0 – normal 30 – Negro 40 – Negro
1 – negrita 31 – Rojo 41 – Rojo
4 – subrayado 32 – Verde 42 – Verde
33 – Amarillo 43 – Amarillo
34 – Azul 44 – Azul
35 – Púrpura 45 – Púrpura
36 – Turquesa 46 – Turquesa
37 – Blanco 47 – Blanco

Poner título a las pestañas

A veces cuando tenemos muchas pestañas abiertas en el iTerm, especialmente en la misma shell (ya sea local o remota) nos interesa poder distinguirlas. Bien el propio iTerm permite hacerlo, pulsando manzana+i (⌘+i) nos aparece una ventana en la cual podemos cambiar el nombre en el campo "name".

ventana información iTerm

También podemos añadir un texto a este nombre desde la shell usando un simple echo con una secuencia de escapes:

echo "^[]1;texto^G"

NOTA: NO vale copiar y pegar ya que no funcionará, ^] es control+v y seguido esc, ^G es control+v y seguido control+g, es muy importante. Con esto añadimos a la pestaña "texto" a lo que ya estuviera:

Pestaña iTerm con texto añadido

También podemos usar otro tipo de escape que es básicamente lo mismo:

echo -ne "]0;texto"

Lo interesante de esto es que el texto puede ser una variable o una función de Bash o lo que queramos con lo cual podemos añadir que nos indique el path o directorio actual:

echo  "^[]1;${PWD/#$HOME/~}^G"

El problema de esto es que no es dinámico y si nos cambiamos de directorio no se cambia a menos que coloquemos esa cadena de escape en la variable PS1 que se encarga de cambiar el prompt:

PS1="\[]0;\u@\h: \w\]\u@\h:\W>"

Con lo que tanto el prompt como la pestaña se irán actualizando (usuario@host:path>) según vayamos cambiando de directorio. Yo personalmente como prompt uso el siguiente que es a color y doble línea:

PS1="\[\]\u\[\]@\[\]\H\[\]:\[\]\w\[\]
\$ "

Si además queremos que nos actualice la pestaña (solo el path para que se vea mejor y sea más útil):

PS1="\[]0;\w\]\[\]\u\[\]@\[\]\H\[\]:\[\]\w\[\]
\$ "

Esto lo podemos meter en el fichero .bash_profile de nuestra home:

# Actualiza prompt y pestaña
export PS1="\[]0;\w\]\[\]\u\[\]@\[\]\H\[\]:\[\]\w\[\]
\$ "
# Actualiza solo prompt
export PS1="\[\]\u\[\]@\[\]\H\[\]:\[\]\w\[\]
\$ "
NOTA
Solo puede estar activo uno de los dos así comenta o borra el que no quieras.

Retro

Lugares

Redes

Sistemas

Varios