Linux prompt
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
.
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
.
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.
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.
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.Para darle color al prompt
, la estructura es la siguiente [x;y;zm $PS1 [m
[
comienzas la secuenciax;y;z
definen el formato (x), color de texto (y) y color de fondo (z).m
La m marca el dinal de la secuencia.[m
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 |
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".
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:
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="\[[33m\]\u\[[37m\]@\[[32m\]\H\[[37m\]:\[[36m\]\w\[[37m\] \$ "
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\]\[[33m\]\u\[[37m\]@\[[32m\]\H\[[37m\]:\[[36m\]\w\[[37m\] \$ "
Esto lo podemos meter en el fichero .bash_profile de nuestra home:
# Actualiza prompt y pestaña export PS1="\[]0;\w\]\[[33m\]\u\[[37m\]@\[[32m\]\H\[[37m\]:\[[36m\]\w\[[37m\] \$ " # Actualiza solo prompt export PS1="\[[33m\]\u\[[37m\]@\[[32m\]\H\[[37m\]:\[[36m\]\w\[[37m\] \$ "