Modelando el prompt (bash)

By 6 de agosto de 2006 Linux No Comments

Personalmente me gusta el prompt que tiene SuSE en su forma y Gentoo por su estética, diría algo de Debian, pero su forma/estética, es parecida a la de Gentoo sin colores.tux_topic_mirror.png

Hay dos formas de implementar esto en ~/.bashrc y en /etc/profile, en la primera opción se personalizará el prompt para el usuario en cuestión, mientras que el la segunda opción se estipulará para todos.

Si es un login shell (getty, gdm, kdm?, pero no xdm):
- primero lee /etc/profile,
- después el primero que encuentra de ~/.bash_profile, ~/.bash_login y ~/.profile
- al salir, lee ~/.bash_logout

Cuando un shell interactivo que no es un login shell ha comenzado, bash lee y ejecuta comandos desde ~/.bashrc.

Todo esto está muy bien, pero. Donde?

En una linea que tiene un 'condicional' parecido a este:

# Do not set PS1 for dumb terminals
if [ "$TERM" != 'dumb' ] && [ -n "$BASH" ] then
export PS1='[\033[01;31m]\h [\033[01;34m]\W \$ [\033[00m]'
fi

(Cuidado con esto, no es peligroso pero, primero aconsejo copiar las lineas que vayamos a reemplazar y luego comentarlas con #, luego hacemos pruebas o bien nos basamos en la lógica del 'condicional', comprueba, si es que lo deseas así, que tipo de prompt tendrá el usuario y que tipo de prompt tendrá root y modifica a tu gusto)

Esto nos muestra un promp colorerado y con una $ al final de todo.
A mi me gusta este:

export PS1='[\033[01;32m]\[email protected]\h [\033[01;34m]:\w> [\033[00m]'El término \W \$ [\033[00m]'
fi
export PATH="/bin:/usr/bin:${PATH}" # Establecemos el path para user, si no estamos seguros: nada.
fi

# agregamos alias

alias cp='cp -i'
alias ls='ls -G' # esto si es BSD, si es GNU/Linux será: alias ls='ls --color'
alias mv='mv -i'
alias pico='nano -w' # Alias para el editor de texto 'nano'
alias rm='rm -i'
alias grep='grep --color' # grep nos destacará la cadena de texto encontrada en color

Algo a tener muy encuenta también es que /etc/profile (si es que elegimos este archivo para la configuración y no el de ~/ ), es que tanto la shell sh como bash leen de ahí, es decir; Como /etc/profile también lo lee /bin/sh, combiene detectar alguna variable específica de bash antes de hacer cosas:

if [ -n "${BASH_VERSION}" ]; then
# lo que se puede hacer con bash
else
# lo que se puede hacer con sh
fi

Ejemplo:

if [ "$PS1" ]; then
if [ "$BASH" ]; then
PS1='\[email protected]\h:\w\$ '
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi


Sólo recordar adaptar éste código a nuestro /etc/profile o ~/.bashrc

Parametros para personalizar el prompt ($PS1):

a Caracter Bell (sonido)
d fecha ds/m/d
hh:mm:ss en 24h
T hh:mm:ss 12h
@ hh:mm:ss AM/PM
e esc
h nombre de host
H nombre completo de la maquina
newline
carrier feed
s muestra: bash
u username
v version del bash
V version completa del bash
w directorio actual
W directorio actual en letras
! numero de historico
# numero de comando
$ si eres root # si no $
xxx numero octal (xxx)
contrabarra
[ ] caracter de control

los colores los podeis cambiar en las lineas EXPORT PS1. los que hay os los pongo aqui y a gustos...

Negro 0;30 Gris oscuro 1;30
Azul 0;34 Azul claro 1;34
Verde 0;32 Verde claro 1;32
Cyan 0;36 Cyan claro 1;36
Rojo 0;31 Rojo claro 1;31
Purpura 0;35 Purpura claro 1;35
Marron 0;33 Amarillo 1;33
Gris claro 0;37 blanco 1;37

Leave a Reply

Your email address will not be published.