559 - Fish ha revolucionado mi terminal Linux
#fish es una #shell para #linux especialmente amigable con el usuario. Te cuento por que he decidido cambiar a esta shell desde Zsh y sus ventajas
Pasar de Bash a Zsh fue un auténtico drama. Así como lo estás leyendo. Me resistía a abandonar esa shell que tanto tiempo me había acompañado. Después de un tiempo, me di cuenta que no era para tanto. Al final, los scripts seguiría haciéndolos en Bash, o en Zsh, a mi conveniencia. Y lo cierto, es que han sido muchos mas en Bash, que en Zsh. En este último casi, fue al final de los tiempos cuando quise hacer algunos complementos. Hoy, pasar de Zsh a Fish, no ha supuesto tanto drama para mi. Si, inicialmente, quise resistirme, pero luego todo vino rodado. Así que finalmente le dije adiós a Zsh, y bienvenido al super productivo Fish. En este episodio te cuento mi aventura con Zsh y el porqué del cambio a Fish.
Fish ha revolucionado mi terminal Linux
¿Que es una shell?
Empecemos por el principio. Para los habituales, no es necesario que explique lo que es una shell, pero para los recién llegados, indicar que una shell, no es mas que un intérprete de comandos, una interfaz de usuario que permite comunicarse con el sistema operativo.
Existen diferentes shell dependiendo del interfaz que estemos utilizando,
- CLI, Command Line Interface
- TUI, Text based User Interface
- GUI, Graphical User Interface
- NUI, Natural User Interface
Ya ves, que no soy nada riguroso al expresarme, porque en general, cuando hablo de shell, siempre me refiero a cli, o en alguna que otra ocasión a tui, pero en este segundo caso, lo digo de forma explícita. Y sin embargo, una shell puedes ser cualquier interfaz de usuario.
¿Por qué dar una oportunidad a Fish?
Como te decía, probé Fish hace muchos años, y lo cierto es que no me llevé muy buenas sensaciones. Por aquel entonces utilizaba Bash como shell y estaba mas que satisfecho. Sin embargo, a finales de diciembre, comienzos de enero, en el grupo de Telegram, surgió de nuevo el debate sobre que shell utilizar. En ese momento, comenté mis experiencias, y me quedé tan tranquilo.
Pero, al parecer, algo había quedado en mi mente, y me decía que debía darle una nueva oportunidad a Fish. Esto todavía caló mas hondo, cuando me enteré que Fish había sido migrado a Rust. Aunque a efectos de usuario, puede ser que no lo note, siempre está el gustillo de haber tomado la decisión correcta cuando decidí aprender un nuevo lenguaje de programación, y no sabía si Rust o Go.
Neutral a la shell
Antes que nada tengo que aclarar, que con el paso del tiempo, y sobre todo con la llegada de Rust, he ido añadiendo diferentes herramientas que me han ido haciendo neutral a la shell que utilice.
Por ejemplo, una de las características que se tiene en cuenta a la hora de elegir una u otra shell es la personalización del prompt. En este caso, yo lo tengo externalizado con starship.
Otra cuestión, por ejemplo, es el historial. Esta discusión, en mi caso también ha pasado a un segundo plano, desde el mismo momento que he adoptado atuin para relacionarme con el historial.
Un paseo por el pasado
Todo empezó con Bash. De hecho utilizo y sigo utilizando Bash para realizar scripts, y esto lo hago preferentemente. Inicialmente era reacio a cambiar de Bash a otra shell, por la simple razón de que es lo que me encontraba en la mayoría de servidores con los que trabajo.
Con el paso del tiempo, pensé, ¿y que tiene que ver la shell de mi entorno de escritorio con la shell de las máquinas a las que me conecto?. Esto creo que fue el punto que me dio pie a cambiar de Shell en mi escritorio
De Bash a Zsh
Zsh ofrece determinadas ventajas sobre Bash, y que quería aprovechar. Algunas ventajas son,
- Facilidad de la personalización del prompt
- El autocompletado es mucho mas rápido
- Tiene expansión en línea
- El completado con tabulador es tipo menú
- Es mas configurable
- Es capaz de resolver errores al escribir un comando o en el completado
Esto por citar algunas, puedes encontrar muchas mas diferencias, y las ventajas de utilizar Zsh frente a Bash, sobre todo como Shell, mas que como lenguaje de scripting.
Los complementos
Llegados a este punto hablar sobre el tema de los complementos, que es precisamente una de las razones que nos atrae, a muchos usuarios a cambiar de Bash a Zsh o a otra shell. Decir que tienes bash-it para tus complementos en Bash, y que inicialmente es lo que estuve utilizando mientras utilizaba Bash como mi shell por defecto.
Cuando cambié de Bash a Zsh, por las ventajas que me ofrecía Zsh, también cambié de framework, evidentemente. En este caso, y como no podía ser de otra forma, fui a parar a Oh my zsh, y por supuesto a powerlevel10k.
Sin embargo, con el paso del tiempo, he ido apartando el brilli brilli que aporta todo esto, y viendo como mi shell se ralentizaba* por momentos. Lo que me llevó a quitar estos framework.
Así, en el caso de Zsh, y para poder tener algunas características como el resaltado, necesité instalar unos pocos complementos, no tenía mas de 3 o cuatro, que me aportaban estas características. Aquí es justo donde entran las herramientas que te comentaba que me permiten olvidarme de la shell, volverme agnóstico a la shell.
De Zsh a Fish
Y ahora, ¿por qué cambiar a fish? Una de las razones es que la mayoría de las características que me gustan de Zsh, y que me dieron pie a cambiar de Bash a Zsh vienen de caja con fish. Es decir, no he necesitado instalar ningún complemento, ni personalizar nada, ni cuestiones similares. Y esta era precisamente una de las razones que mas me molestaban de Zsh, que para tener una shell funcional, a nivel que hoy la conozco, necesitara instalar por narices complementos.
- Fish muestra sugerencias conforme escribes. Sugerencias basadas en el historial y en el directorio en el que te ncuentras.
- El scripting es mas sencillo e intuitivo que en el caso de Zsh y Bash.
- Fish tiene una muy buena documentación.
La configuración de Fish
Una de las características excepcionales de Fish, y que no encontrarás en otras shell, es la posibilidad de configurar vía web. Así como lo estás oyendo. Aunque también te tengo que decir, que yo no lo he utilizado para nada.
Empiezo por el principio. Lo primero que me ha llamado la atención ha sido la configuración de Fish. Acostumbrado a los .bashrc
y .zshrc
, la configuración de Fish está en su sitio, en ~/.config/fish/config.fish
.
Pero además, nace con una estructura de directorios mas que interesante,
.
├── completions
│ └── poetry.fish
├── conf.d
│ ├── aliases.fish
│ └── variables.fish
├── config.fish
├── fish_plugins
├── fish_variables
├── functions
│ ├── iconify.fish
│ ├── minify.fish
│ ├── toclip.fish
│ ├── ya.fish
│ └── yadmalt.fish
└── themes
Básicamente no he tenido que realizar ningún tipo de configuración para empezar a trabajar con Fish. Bueno, esto no es cierto del todo, porque utilizo determinadas herramientas, como he comentado anteriormente, que me hacen independiente de la shell que esté utilizando.
Scripting en Fish
Si bien, de forma general utilizo y seguiré utilizando Bash, por la simple razón de que, es lo que encuentro y encontraré en todos los servidores en los que entro, he decidido, de forma unilateral, migrar los scripts que tengo en mi equipo personal a Fish.
Y es que me encuentro mucho más cómodo con la sintaxis que me ofrece Fish que con la que me ofrecen tanto Bash como Zsh, y dado que tengo la opción de elegir, pues simplemente elijo. Sinceramente, me parece mucho mas intuitiva a mi modo de ver. Aunque tengo que decir, que no hay grandes diferencias.
Autoload
Esta característica me encanta, y para los que no paramos de crear funciones y modificar nuestra shell añadiendo nuevas características, el autoload es una auténtica maravilla.
Si modificas cualquier archivo de los que se encuentran en la configuración directamente se carga. No necesitas hacer un source ~/.bashrc
, ni nada por el estilo.
En este sentido, lo que estoy haciendo es migrar mis scripts en Bash
y Zsh
a Fish
. Pero, de nuevo, y como suele hacer últimamente, lo estoy migrando de a pocos. Conforme necesito alguno de los scripts lo migro a Fish
.
Conclusiones
No estaba muy convencido de cambiar a Fish, sin embargo después de unas semanas de uso estoy mas que satisfecho. Siento que es mas ligero que Zsh, pero esto es una sensación completamente subjetiva. Me da la impresión que es mas rápido, de nuevo una sensación subjetiva.
Lo que inicialmente me parecía un incordio, que era reescribir mis scripts en Fish, se ha convertido en un placer.
Veremos como va en los próximos meses y te iré contando sobre la evolución, para que tengas otro punto de vista.
Más información,