Ya es sabido que mi shell favorita en Unix por estos tiempos en Zsh, una shell muy versatil, configurable y algo que me agrada demasiado es su autocompletado inteligente y el right prompt.
En este texto vamos a tratar algunos trucos o tips para Zsh, los cuales espero que les resulten más que util.
1-Cambiar la shell por defecto de nuestro usuario a Zsh
Esta es una taréa mas que facil, lo que debemos hacer es modificarlo el shell que inicia el usuario en el archivo /etc/passwd, para ello con nuestro editor de textos favoritos (recomiendo Vim), abrimos el archivo /etc/passwd.
gnats:x:41:41:Gnats Bug-Reporting:/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
facundo:x:1000:1000::/home/facundo:/bin/bash
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
messagebus:x:101:103::/var/run/dbus:/bin/false
Como primer punto, localizamos a nuestro usuario, en mi caso facundo, y remplazamos el shell /bin/bash por /bin/zsh quedando de la siguiente manera:
gnats:x:41:41:Gnats Bug-Reporting:/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
facundo:x:1000:1000::/home/facundo:/bin/zsh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
messagebus:x:101:103::/var/run/dbus:/bin/false
Una vez listo, guardamos los cambios y salimos del editor de textos, la próxima vez que nos loguiemos en el sistema, iniciaremos con Zsh
.
2-Dandole color a nuestro prompt
El prompt es la llamada del sistema que vemos en la shell, la cual nos dice que esta a la espera de comandos, generalmente tiene un aspecto un poco “feo”, algo similar a esto [facundo@tty0:~], sin colores, poco atractivo, etc. Cabe destacar que para poder realizar esto necesitamos una terminal ANSI.
Esta tarea no es dificil, pero si algo mas tediosa, ya que ir provando color por color, es algo molesto, por lo cual recomiendo el siguiente script, para conocer bien los codigos de los colores.
#!/bin/bash
T='gYw' # The test text
echo -e "\n 40m 41m 42m 43m\
44m 45m 46m 47m";
for FGs in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' \
'1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' \
' 36m' '1;36m' ' 37m' '1;37m';
do FG=${FGs// /}
echo -en " $FGs 33[$FG $T "
for BG in 40m 41m 42m 43m 44m 45m 46m 47m;
do echo -en "$EINS 33[$FG33[$BG $T 33[0m";
done
echo;
done
echo
Bien, lo primero seria salvarno en algún archivo de textos y darle permisos de ejecución al mismo.
chmod +x color.sh
Y para ejecutarlo simplemente hacemos: sh color.sh
Notaremos que los colores se expresan en codigos númericos, los que terminan en 0, son fuentes normales, los que terminan en 1 en negrita.
Bien, luego de esta aburrida introducción a los colores, tenemos que saber que el prompt se almacena en una variable global llamada PS1, esta variable va a contener todas las directivas que le pasemos a nuestro prompt.
Podemos verificar esto haciendo:
echo $PS1
${debian_chroot:+($debian_chroot)}\u@\h:\w\$
Bien, esto tiene menos onda que pelo lasio, por lo cual vamos a empezar a configurar nuestro prompt en Zsh, por lo cual, veamos algunas directivas primero:
| Sequence |
Printed |
| %T |
System time (HH:MM) |
| %* |
System time (HH:MM:SS) |
| %D |
System date (YY-MM-DD) |
| %n |
Your username |
| %B - %b |
Begin - end bold print |
| %U - %u |
Begin - end underlining |
| %d |
Your current working directory |
| %~ |
Your current working directory, relative to ~ |
| %M |
The computer's hostname |
| %m |
The computer's hostname (truncated before the first period) |
| %l |
Your current tty |
Bien si por ejemplo ponemos %n@%d: nos mostrara (en mi caso): facundo@/path/:, a travez de estos operandos podemos ir definiendo nuestro prompt del sistema.
Bien ya teniendo las "directivas" de configuración y los codigos de los colores, podemos llegar a obtener algo como esto:

Zsh running over rxvt-unicode
Lo cual no es otra cosa que el siguiente contenido en la variable global PS1:
$'%B%n%{\e[1;32m%}<%{\e[1;37m%}at%{\e[1;32m%}%B>%{\e[1;37m%}%M (%{\e[1;32m%}%~%{\e[1;37m%})%{\e[1;32m%}->%{\e[0;37m%}%b '
export RPS1="[%T]"
El sistema incorpora este contenido a sus variables globales a través del comando export.
Por lo cual si queremos utilizar este prompt, como en mi caso, solamente abriremos con Vim, el archivo /etc/zsh/zshrc e incorporaremos lo siguiente:
export PS1=$'%B%n%{\e[1;32m%}<%{\e[1;37m%}at%{\e[1;32m%}%B>%{\e[1;37m%}%M (%{\e[1;32m%}%~%{\e[1;37m%})%{\e[1;32m%}->%{\e[0;37m%}%b '
export RPS1="[%T]"
También podremos hacer esto modificando nuestro ~/.zshrc y tarea terminada.
3-Activando el right prompt
El procedimiento es exactamente que en el caso anterior, solo que trabajaremos sobre otra variable, la variable global RPS1, por lo cual nuevamente en el archivo /etc/zsh/zshrc o en nuestro ~/.zshrc añadiremos el siguiente right prompt que nos muestra la hora actual:
export RPS1="[%T]"
4-Cargando alias con un archivo externo
Tengo la costumbre de usar una gran cantidad de alias en mi sistema, y de tenerlos a todos aislados en archivo con el siguiente formato:
alias dfh='df -h | ccze'
alias dir='ls --color=auto --format=vertical'
alias informe='/usr/local/bin/informe; pager /var/www/informe.txt'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -l'
alias ls='ls --color=auto'
En este archivo que yo he llamado .alias (es oculto), se guardan todos los alias que utilizo para ahorrar algunas líneas en la utilización del CLI. para llamar de Zsh a un archivo externo, podemos nuevamente modificar el archivo /etc/zsh/zshrc o en nuestra home el archivo ~/.zshrc
E incorporar el path hacia nuestro archivo con alias, poniendo delante del path un . (punto), el cual es solo un comando de Unix, el cual lo carga a modo de "libreria".
Por ejemplo en mi caso:
. ~/.alias
Ya que el archivo .alias se encunetra en mi home.
5-Quote of day
Una caracteristica simpatica de nuestra shell es poder utilizar un quote of day, que no es nada más que una cita de alguna frase, para hacerlo tenemos que instalar fortunes.
Para ello en el shell:
#: apt-get install fortunes fortunes-mod fortunes-es
Bien, una vez listo esto (¿notaron que instalamos fortunes en español?), con nuestro editor de textos favorito (vuelvo a citar a Vim), editamos el archivo /etc/zsh/zlogin, el cual contiene todas aquellas directivas que desean ser ejecutadas unicamente luego de realizado el login al sistema y por unica vez.
En este archivo añadimos algo como esto:
echo "Quote of day: $(/usr/games/fortune -s)"
Y listo, la proxima vez que nos loguiemos, tendremos a fortunes dandonos una cita
.
Bueno esto es todo por hoy, espero que les halla gustado.
Tags: alias,
Bash,
prompt,
shell,
unix,
zsh