Mover a zsh

Nov 28, 2021
admin

Apple ha anunciado que en macOS 10.15 Catalina el shell por defecto será zsh.

En esta serie, documentaré mis experiencias moviendo bash ajustes, configuraciones y scripts a zsh.

  • Parte 1: Mover a zsh (este artículo)
  • Parte 2: Archivos de configuración
  • Parte 3: Opciones del Shell
  • Parte 4: Aliases y funciones
  • Parte 5: Completaciones
  • Parte 6: Personalización del zsh Prompt
  • Parte 7: Miscelánea
  • Parte 8: Scripting zsh

zsh (creo que se pronuncia zee-shell, aunque zish es divertido de decir) sucederá a bash como shell por defecto. bash ha sido el shell por defecto desde Mac OS X 10.3 Panther.

Esta serie ha crecido hasta convertirse en un libro: reelaborado y ampliado con más detalles y temas. Al igual que mis otros libros, planeo actualizar y añadir a ella después de la liberación también, mantenerlo relevante y útil. Ya puedes pedirlo en la Apple Books Store.

¿Por qué?

El binario de bashincluido en macOS lleva mucho tiempo estancado en la versión 3.2. La bash v4 fue lanzada en 2009 y la bash v5 en enero de 2019. La razón por la que Apple no ha cambiado a estas versiones más nuevas es que están licenciadas con GPL v3. bash v3 sigue siendo GPL v2.

zsh, por otro lado, tiene una licencia «tipo MIT», lo que hace que sea mucho más agradable para Apple incluirlo en el sistema por defecto. zsh ha estado disponible como en macOS durante mucho tiempo. La versión zsh en macOS 10.14 Mojave es bastante nueva (5.3). macOS 10.15 Catalina tiene la actual zsh 5.7.1.

¿Ha desaparecido bash?

No.

macOS Catalina sigue teniendo la misma /bin/bash (versión 3.2.57) que Mojave y versiones anteriores de macOS. Este cambio es sólo para las nuevas cuentas creadas en macOS Catalina. Cuando se actualiza a Catalina, el shell por defecto de un usuario seguirá siendo lo que era antes.

Muchos scripts en macOS, sistemas de gestión e instaladores de Apple y de terceros dependen de /bin/bash. Si Apple acaba de arrancar este binario en macOS 10.15 Catalina o incluso 10.16. Muchos instaladores y otras soluciones se romperían y simplemente dejarían de funcionar.

Los usuarios que tienen /bin/bash como su shell por defecto en Catalina verán un aviso al inicio de cada sesión de Terminal indicando que zsh es ahora el shell por defecto recomendado. Si desea continuar utilizando /bin/bash, puede suprimir este mensaje estableciendo una variable de entorno en su .bash_profile o .bashrc.

export BASH_SILENCE_DEPRECATION_WARNING=1

También puede descargar e instalar una versión más reciente de bash usted mismo. Tenga en cuenta que las instalaciones personalizadas de bash residen en un directorio diferente, por lo general /usr/local/bin/bash.

¿Se mantendrá bash indefinidamente?

Apple le recomienda encarecidamente que cambie de shell. Esto es diferente del último cambio en Mac OS X 10.3 Panther, cuando Apple cambió el valor por defecto a bash, pero realmente no se preocupó si usted permaneció en tcsh. De hecho, tcsh todavía está presente en macOS.

La mensajería de Apple debería decirnos, que los días de /bin/bash están contados. Probablemente no muy pronto, pero eventualmente mantener una versión de más de diez años de bash en el sistema se convertirá en un lastre. El bash incorporado tuvo que ser parcheado en 2014 para mitigar la vulnerabilidad ‘Shellshock’. En algún momento Apple considerará que el coste del mantenimiento continuado es demasiado alto.

Otra pista es que en macOS Catalina apareció un nuevo shell (y se menciona en el artículo de soporte). La ‘Debian Almquist Shell’ dash se ha añadido a la línea de shells. dash está diseñado para ser una implementación mínima del shell estándar Posix sh. Hasta ahora, en macOS (incluyendo Catalina), sh invoca a bash en modo de compatibilidad con sh.

Como menciona el artículo de soporte de Apple, Catalina también añade un nuevo mecanismo para que los usuarios y los administradores puedan cambiar qué shell maneja las invocaciones de sh. Los MacAdmins o los usuarios pueden cambiar el enlace simbólico almacenado en /var/select/sh para que apunte a un shell distinto de /bin/bash. Esto cambia qué shell interpreta los scripts el shebang #!/bin/sh o los scripts invocados con sh -c. Cambiar el intérprete para sh no debería, pero puede cambiar el comportamiento de varios scripts cruciales en el sistema, herramientas de gestión y en los instaladores, pero puede ser muy útil para propósitos de prueba.

Todos estos cambios son indicadores de que Apple se está preparando para eliminar /bin/bash en algún momento, aún indeterminado, del futuro.

¿Tengo que esperar a que Catalina cambie a zsh?

No, zsh está disponible Mojave y en versiones anteriores de macOS. Puedes empezar a probar zsh o incluso cambiar tu shell por defecto ya.

Si quieres simplemente ver cómo funciona zsh, puedes simplemente abrir Terminal y escribir zsh:

$ zshMacBook%

El principal cambio que verás es que el prompt se ve diferente. zsh utiliza el carácter % como indicador por defecto. (La mayoría de las pulsaciones de teclas de navegación y otros comportamientos seguirán siendo los mismos que en bash.

Si quiere cambiar ya su shell por defecto a zsh puede utilizar el comando chsh:

$ chsh -s /bin/zsh

Esto le pedirá su contraseña. Este comando no cambiará el shell actual, sino todos los nuevos, así que cierre las ventanas y pestañas del Terminal actual y abra uno nuevo.

¿En qué se diferencia zsh?

Al igual que bash (‘Bourne again shell’ ), zshderiva de la familia de shells ‘Bourne’. Debido a esta ascendencia común, se comporta de manera muy similar en el uso cotidiano. El cambio más obvio será el prompt diferente.

La principal diferencia entre bash y zsh es la configuración. Dado que zsh ignora los archivos de configuración de bash (.bash_profile o .bashrc) no puede simplemente copiar la configuración personalizada de bash a zsh. zsh tiene muchas más opciones y puntos para cambiar la configuración y el comportamiento de zsh. Hay todo un ecosistema de herramientas de configuración y temas llamados oh-my-zsh que es muy popular.

zsh también ofrece una mejor configuración para el autocompletado que es mucho más fácil que en bash.

Estoy planeando un post separado, describiendo cómo transferir (y traducir) sus configuraciones de bash a zsh.

¿Qué pasa con los scripts?

Dado que zsh ha estado presente en macOS durante mucho tiempo, podrías empezar a mover tus scripts de bash a zsh de inmediato y no perder la compatibilidad hacia atrás. Sólo recuerde establecer el shebang en sus scripts a #!/bin/zsh.

Ganará algunas características en las que zsh es superior a bash v3, como arrays y arrays asociativos (diccionarios).

Hay una excepción en la que ahora recomendaría usar /bin/sh para sus scripts: el sistema de recuperación no contiene el shell /bin/zsh, incluso en la beta de Catalina. Esto todavía podría cambiar durante la fase beta, o incluso más tarde, pero entonces usted todavía tiene que considerar las instalaciones más antiguas de macOS donde zsh definitivamente no está presente en la Recuperación.

Cuando usted planea usar sus scripts o pkgs con scripts de instalación en un contexto de Recuperación (o NetInstall, o unidad USB de arranque), como Twocanoes MDS, installr o bootstrappr, entonces usted no puede confiar en /bin/zsh.

Dado que ahora sabemos que bash va a desaparecer, la única opción común que queda es /bin/sh.

Cuando se construye un paquete instalador, puede ser difícil anticipar todos los contextos en los que podría ser desplegado. Así que, para los scripts de pre y postinstalación, recomendaría usar /bin/sh como el shebang de ahora en adelante.

Solía recomendar usar /bin/bash para todo lo relacionado con MacAdmin. /bin/sh es definitivamente un paso hacia abajo en la funcionalidad, pero parece la opción más segura para el apoyo continuo.

Resumen

En general, mientras que el mensaje de Apple es muy interesante, el cambio en sí es menos dramático que los titulares. Apple no está «sustituyendo» bash por zsh, al menos no todavía. En general, tendremos que repensar y volver a aprender algunas cosas, pero también hay mucho que ganar al cambiar finalmente de un shell de diez años a uno nuevo y moderno!

Siguiente

En la siguiente parte veremos los archivos de configuración para zsh.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.