Fish y Zsh


Aunque estamos acostumbrados a utilizar Bash, existen otras alternativas. De hecho, no todo el mundo sabe que Debian ha cambiado la shell por defecto a Dash.

Es importante saber qué estamos usando, ya que puede fastidiar algunos de los scripts que tengamos:

ls -lh $(which sh)
lrwxrwxrwx 1 root root 4 nov  8 00:00 /bin/sh -> dash

En el artículo de hoy presentaré dos alternativas más: Fish y Zsh.

Historia

Bash por sí solo se me hizo poco hace muchísimo tiempo, y comencé a utilizar la extensión bash_completion. Esta utilidad me permitía completar los targets de los Makefiles y otra serie de mejoras que Bash por sí mismo no soportaba.

Sin embargo, me sabía a poco. Conocí Zsh, pero me pareció demasiado complejo de configurar, por lo que decidí pasarme a Fish. Llevo meses utilizando Fish como shell principal, pero ahora he vuelto a Zsh gracias al proyecto Oh_my_Zsh, que hace que Zsh sea mucho más sencillo de configurar.

No he sido el único en seguir este camino, por eso me gustaría contaros qué he visto de bueno y de malo en cada paso del camino.

Fish y Zsh

Fish

La "Friendly shell" ofrece las siguientes ventajas:

  • Sugerencias automáticas: aprende de la historia previa para ofrecerte sugerencias de completion.
  • Color: 256 colores, que se definen como en cualquier web.
  • Lenguaje: Ofrece un lenguaje de scripting más sencillo que Bash.

Por poner un ejemplo de esto último, en bash:

for i in $(seq 10); do echo $i; done

En Fish:

for i in (seq 10); echo $i; end

Esta característica es una espada de Damocles: Por un lado te ofrece un lenguaje más sencillo, pero por otro, estoy demasiado acostumbrado al lenguaje de Bash. Al final, siempre tengo que cambiarme a bash para ejecutar un script de este tipo. Además, no es capaz de ejecutar programas Bash, muy útiles al usar VirtualEnv, por ejemplo. De hecho, VirtualEnv ofrece un "sabor" de script sólo para Fish.

Algo muy bueno es que ignora mayúsculas y minúsculas. Sin embargo, a veces me ofrece la que no es, lo que es un problema al indicar una opción (ejemplo: ls -lH) y resulta difícil indicarle que no es lo que quiero.

Otro problema es la completion, ya que en ocasiones me escapa el símbolo de escape, resultando en cadenas como foo\\\ bar cuando yo espero foo\ bar, haciéndome ir más lento. Se supone que este problema está arreglado en la última versión de desarrollo, ésa por la que llevo esperando más de 3 meses.

Algo que me gusta mucho de Fish y que ha dejado impresionado a más de un colega son las sugerencias automáticas, ya que te va mostrando la sugerencia más probable a medida que escribes. Debo decir que la tasa de acierto es realmente buena.

Y también está genial el cambio de colores: si estás escribiendo una órden errónea, estará en rojo, mientras que si la orden, opción, etc. existe, pasa a verde.

Zsh

Zsh es un infierno de configuración... Salvo que utilices Oh_my_Zsh. Esta extensión permite gestionar plugins, temas, etc. Hay muchos donde elegir.

La completion ignora mayúsculas y minúsculas, y te muestra una lista con las opciones, marcando la actual, que puedes recorrer con TAB.

Es totalmente compatible con Bash, por lo que no es necesario adaptar los scripts ni aprender un lenguaje nuevo.

Sin embargo, estoy acostumbrado a utilizar ALT + arrow para moverme entre palabras, cosa que aún no he conseguido echar a andar. Creo que se debe a mi urxvt. Tendré que acostumbrarme a usar CTRL + F y CTRL + B, que son estándar.

Llevo poco tiempo usándola y no he encontrado más problemas... Bueno, sí, que la Cheat Sheet son 14 páginas bien aprovechadas :D

Conclusión

Es muy interesante salir de nuestra zona de confort y buscar cosas nuevas, hasta en lo más pequeño que, en este caso, también es de lo más utilizado.

Yo me muevo constantemente en la consola, hasta el punto de haberla transformado en un IDE gracias a tmux y tmuxinator, por lo que un cambio de shell es más importante de lo que parece.

Así que yo recomendaría probar otras alternativas. Quien sabe... ¡Quizá alguna te sorprenda!


Comentarios

Comments powered by Disqus