542 - Zsh no es Bash

542 - Zsh no es Bash

Cuando estás haciendo scripts en #linux y te das cuenta de que #zsh no es #bash . Algunas diferencias tanto en el uso en línea como en los scripts

1:25
-3:15

Como ya te conté hace algún tiempo, Zsh se ha convertido en mi Shell por defecto. Sin embargo, hasta la fecha, he continuado haciendo mis scripts en Bash. Simplemente, porque estoy acostumbrado a utilizar Bash como lenguaje de scripting, entre otras cosas, porque también es el lenguaje de scripting que utilizo habitualmente tanto de forma personal como profesional. Esto no quita que puntualmente haga algún script en Zsh, pero no es lo normal. Sin embargo, el otro día, me topé de nuevo con la realizad de que Zsh no es Bash. No son totalmente compatibles, aunque por poco, la verdad.

Zsh no es Bash

Un paseo por el pasado

Una vez cambié de Bash a Zsh, he ido haciendo una progresiva transformación, pasando por distintas fases. Lo primero, fue empezar con Oh-My-Zsh, y probar algún que otro framework, hasta llegar a la situación actual, mucho mas minimalista, pero muy productiva, para mi.

Así, hoy en día, estoy utilizando unos pocos plugins, pero sin ningún gestor de complementos de Zsh, junto con starship, que es la que me da el prompt, lo cual resulta en algo realmente práctico y minimalista.

Entre los plugins que utilizo, hay uno propio, que es el que he ido desarrollando con el paso del tiempo para facilitarme todo el trabajo de los podcasts, vídeos, y demás producción que llevo en danza.

Es precisamente aquí, en mi propio complemento, donde en distintos momentos, me he tropezado con las diferencias entre Zsh y Bash. Pero no tanto a la hora de la shell, sino mas bien, a la hora del scripting.

Algunas diferencias en la shell

Ahora entraré en las diferencias en el scripting entre uno y otro, pero, no solo ahí encontrarás diferencias. También las encontrarás en la propia shell. Existen sutiles diferencias, y son las que me han llevado hasta aquí. Por supuesto, que paso por alto lo relativo al prompt, porque en mi caso lo gestiono con starship.

Por otro lado, el caso del historial, también lo tengo externalizado, en este caso atuin es la herramienta de facilitarme el trabajo. Y te puedo asegurar que lo hace de forma precisa. Es otra de esas herramientas que se ha convertido en totalmente imprescindible para mi.

Tanto Bash como Zsh admiten el autocompletado, pero Zsh, además detecta los errores tipográficos conforme vas escribiendo los distintos comandos que tirarás por línea de comando.

En este sentido, decirte, que acostumbrarme a Zsh ha sido algo relativamente sencillo, en tanto en cuanto, cuestiones como el prompt, las tengo externalizadas a terceros.

  • Los archivos de configuración. Mientras que en Bash utiliza los archivos .bashrc, .profile e .inputrc, en el caso de Zsh, se utiliza .zshrc y .zprofile.
  • Los atajos de teclado. La sintaxis para los atajos de teclado utilizan una sintáxis completamente diferente.

Diferencias en el scripting

Pero lo que mas loco me ha vuelto ha sido el scripting. La cuestión es que puedes seguir ejecutando tus scripts en Bash igualmente sin problema. Simplemente se trata de llamar al intérprete de comandos adecuado. Sin embargo, para el caso de los plugins de Zsh, no hay mas narices, o al menos, yo no las he encontrado que pasar por caja, e implementar los scripts en Zsh.

Algunos de los cambios,

  • Los arrays en Bash empiezan en 0 y en Zsh en 1. Como te puedes imaginar esto ha sido uno de los cambios que mas loco me han vuelto. Pero, bueno, esto es culpa mia por no leer y documentarme.
BashZsh
Primero${a[0]}$a[1]
Segundo${a[1]}$a[2]
Último${a[${#a[@]}-1]}$a[-1]
Número${#a[@]}$#a
Todos${a[@]}$a[@]
  • Los flags. Son una serie de parámetros que van entre paréntesis y que permiten modificar la variable. Por ejemplo,
  • ${(L)}variable devuelve el valor de la variable en minúsculas
  • ${(U)}variable devuelve el valor de la variable en mayúsculas
  • ${(O)}variable devuelve el valor de la variable ordenado de forma descendente
  • ${(o)}variable devuelve el valor de la variable ordenado de forma ascendente

Existen muchos otros cambios a tener en cuenta cuando trabajas con Zsh vs Bash, mientras haces scripts. Sin embargo, te dejo estos dos, y en su caso, en futuros artículos iré completando.

Conclusión

Se que es algo de perogrullo. Algo que tenía que haber tenido en cuenta, pero lo cierto, es que lo ignoré por completo. Esto es lo que lleva el trabajar a intuición, que de vez en cuando te llevas alguna que otra sorpresa.


Más información,

3 comentarios en “Zsh no es Bash

  1. MA
    marC hace 1 año

    No se, una cosa es usar el zsh en la linea de comandos por que te agiliza el tipeo y eso (yo lo he probado y me quedo con bash, quizás porque en Unix siempre he preferido ksh), otra cosa muy distinta es usarlo en scripts de shell, sinceramente no he visto ni un script de los que llegan a mis manos en zsh, aunque han pasado unos cuantos siempre en bash, csh, ksh, sh alguno en dash pero en zsh ninguno. Creo que vas a ser el primero al que le vea un script en zsh, bueno gustos son colores!

    1. AT
      atareao hace 1 año

      Tal y como explico en el podcast, para hacer un complemento para Zsh lo tienes que hacer en Zsh. Por esto, seguro que ni soy el primero, ni el último en hacer un script en zsh, dado que todos los complementos para Zsh están en Zsh.
      Saludos y gracias por tu comentario.

  2. AL
    Alvaro hace 12 meses

    La verdad es que siempre que pruebo una distro nueva y me encuentro con zsh acabo cambiando a bash. Lo he probado, no está mal, pero paso más tiempo dentro de otros equipos de forma remota que en uno con zsh, así que con bash y una pequeña lista de alias me siento feliz. Mi alternativa a sentirme más ágil fue simplemente meter el modo vi en bash en lugar del tradicional basado en emacs

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *