jueves, 20 de junio de 2013

Jugando con el prompt y la terminal

¿Que es el prompt?

Es el conjunto de caracteres que se muestran en una línea de comandos para indicar que está a la espera de órdenes. En linux específicamente se puede ver de la siguiente manera:


Usuario@hostname:ubicacion$
root@hostname:ubicacion#


La primera parte corresponde al usuario logueado en la terminal, la segunda al nombre que tiene asignado el equipo seguido por la ruta donde uno se encuentra ubicado (ej. /home/usuario/Documentos  o ~), por ultimo los simbolos $ y # identifican si somos usuarios normales o root.

Es posible cambiar el aspecto de nuestro prompt, haciendo que muestre otros datos como la fecha. Esto lo hacemos modificando el archivo .bashrc que esta en el home de cada usuario (/home/usuario/.bashrc), específicamente cambiando las siguientes lineas (La que empieza con PS1).

 # If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
 PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

La parte marcada de amarillo es la que esta determinando como se va a ver nuestro prompt, podemos usar las siguientes opciones:

\a un caracter ASCII de ring
\d la fecha actual en formato "dia_sem mes día"
\e un caracter ASCII de escape
\h el nombre del equipo hasta el primer .
\H el nombre del equipo
\n nueva línea
\r retorno, enter
\s el nombre del shell
\t el tiempo actual en formato de 24 horas HH:MM:SS
\T el tiempo actual en formato de 12 horas HH:MM:SS
\@ el tiempo actual en formaro de 12 horas con am/pm
\u el usuario actual
\v la version de bash
\V el número de release de batch, versión + parche
\w el directorio de trabajo actual, path
\W el nombre del directorio actual
\! el número en el historial del comando
\# el número de comando de este comando
\$ si el usuario es root (UID=0) se indica un '#', un usuario normal '$'
\\ diagonal
\[ inicio de una secuencia de caracteres no imprimibles
\] fin de la secuencia de caracteres no imprimibles

También es posible cambiar el color de nuestro prompt, para ello hay que descomentar una linea del .bashrc

# uncomment for a colored prompt, if the terminal has the ...
# off by default to not distract the user: the focus ...
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

Solo hay que quitar el numeral (#) para descomentar, con ello se habilitan los colores predeterminados que posteriormente podemos modificar. Por el momento se va a ver así:


Podemos usar las siguientes variables de color para modificar a nuestro gusto, estas variables se delimitan como caracteres no imprimibles ej. \[\033 [color \]

Negro          00;30m          Gris obscuro   01;30m
Rojo           00;31m          Rojo claro     01;31m
Verde          00;32m          Verde claro    01;32m
Café           00;33m          Amarillo       01;33m
Azul           00;34m          Azul claro     01;34m
Púrpura        00;35m          Púrpura claro  01;35m
Cian           00;36m          Cian claro     01;36m
Gris claro     00;37m          Blanco         01;37m
Estas variables de color las cambiamos en la siguiente parte del .bahsrc que esta unas pocas lineas debajo de donde descomentamos force_color_prompt=yes

if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

Como podemos ver ya vienen puestos algunos colores, los cuales cambiaremos a gusto. Ejemplo y resultado:

if [ "$color_prompt" = yes ]; then
  PS1='${debian_chroot:+($debian_chroot)}\[\033[00;31m\]\u\[\033[00;32m\]@\[\033[01;33m\]\h\[\033[01;34m\]:\[\033[01;35m\]\w\[\033[00m\]\$ '


Otra cosa interesante que se puede hacer con la terminal, es que al iniciar nos muestre un texto, por ejemplo un banner de bienvenida o arte ASCII, ejemplo:


No es necesario matarse poniendo un símbolo tras símbolo, hay muchas páginas donde podemos encontrar imágenes al gusto de cada quien, por ejemplo http://ascii-art.de/, la forma de ponerlo es guardando el documento como texto plano y después hacer un cat en la parte superior de nuestro .bashrc

[[ $- == *i* ]] || return

cat ~/lobo

# ~/.bashrc: executed by bash(1) for non-login shells.

El documento lo podemos colocar en la parte que deseemos solo tenemos que poner la ruta completa, si lo pusimos en documentos sería /home/usuario/Documentos/lobo o como yo lo puse en mi home lo coloque usando ~ que es una forma de abreviar /home/usuario

La linea que puse antes del cat es necesaria para evitar errores al momento de hacer transferencias de archivos con scp, eso ya lo explicare con calma en otro post.

En fin, poco a poco iré poniendo mas chácharas para la terminal. Cualquier duda  o comentario es bien recibido.

=P


No hay comentarios:

Datos personales