Zsh contra bash

Cuando hablamos de programación basada en UNIX, generalmente se trata de shells, terminales y las interfaces de línea de comandos. El caparazón más frecuente en este sentido es...

Cuando hablamos de programación basada en UNIX, generalmente se trata de shells, terminales y las interfaces de línea de comandos. El shell más frecuente en este sentido es Intento pero hay otras variantes disponibles y muy utilizadas también, como Zsh o el caparazón Z.

En este artículo, intentaremos trazar la línea entre las dos conchas y mostrar las diferencias para que pueda tener una idea de por qué podría usar una u otra. Pero primero, en las siguientes secciones presentaremos ambos shells antes de compararlos.

Cáscara Z

Paul Falstad lanzó por primera vez Zsh, o Z shell, en 1990 cuando aún era estudiante en la Universidad de Princeton. Z shell está incluido en muchos sistemas operativos, incluido Mac OS (aunque no es el predeterminado que realmente se usa).

Al igual que Bash, Z shell básicamente se puede ver como una versión extendida de [concha de bourne] (https://en.wikipedia.org/wiki/Bourne_shell), y contiene muchas de las mismas características que Bash, que probablemente lo notará en las secciones a continuación. También puede notar que se parece bastante al caparazón de Korn. Algunas de las características que vale la pena mencionar incluyen (pero no se limitan a):

  • Archivo incluyendo
  • Corrección ortográfica
  • Alias ​​de directorio (muy parecido a ~ o ..)
  • Módulos cargables, como controles de socket o un cliente FTP
  • Modos de compatibilidad: p. Puede usar /bin/bash como un reemplazo directo para Bash
  • Scripts de inicio/apagado a través de zshenv, zprofile, zshrc, zlogin y zlogout
  • Finalización del comando git
  • Ampliación de ruta: p. Ingrese cd /u/lo/b, presione tabulador y se completará en cd /usr/local/bin ya que es el único patrón coincidente

Hay muchas más características que las que hemos mostrado aquí, pero al menos esto le da una idea de cómo los caparazones pueden ser diferentes.

Golpe

El shell Bash (también conocido como "Shell Bourne-again") también se lanzó en el mismo período que el shell Z (en 1989) y Brian Fox es considerado el creador detrás de él. Inicialmente se escribió como reemplazo del shell Bourne. Durante muchos años, se ha enviado como el shell predeterminado para GNU, la mayoría de las distribuciones de Linux y Mac OS X (versión 10.3+). Como debería ser un verdadero reemplazo, Bash es capaz de ejecutar todos los comandos de shell de Bourne sin ningún problema.

Hay bastantes características que tiene el shell Bash y algunas de las menos conocidas incluyen:

  • Inserte los últimos parámetros del comando anterior en su comando actual usando Alt + .
  • Puede mantener un proceso en ejecución incluso después de cerrar la sesión. Para hacerlo, use el comando disown -h <pid> donde deberá colocar el ID de proceso (PID) del programa en lugar de <pid>
  • Ejecute el comando anterior nuevamente, pero esta vez con sudo usando el comando sudo !! (!! es la abreviatura de 'el comando anterior')
  • Realice una búsqueda incremental inversa usando las teclas Ctrl + R
  • Presione tabulador dos veces y verá la lista de finalizaciones de la palabra que acaba de escribir o está escribiendo
  • Al ejecutar un script con bash, use la opción -x para generar el contenido del script a medida que se ejecuta

Si desea obtener más información, puede ver una lista mucho más grande de características específicas de Bash [aquí] (http://web.mit.edu/gnu/doc/html/features_4.html#SEC20).

Comparando Z shell y Bash

Ahora que le hemos dado una breve introducción a ambos caparazones, veamos cómo se sostienen cuando se comparan y contrastan juntos.

Lo primero que hay que mirar (y uno de los aspectos más significativos, en mi opinión) es la prevalencia y la popularidad de la concha. Si bien Z shell tiene una buena cantidad de usuarios en la comunidad de desarrolladores, generalmente es más seguro escribir sus scripts para Bash, ya que hay un grupo mucho más grande de personas que podrán ejecutar esos scripts.

La importancia de la adopción también es válida para los recursos públicos y la documentación. Gracias a su gran comunidad, Bash tiene bastantes recursos más para ayudarte a aprender a usarlo.

Por lo tanto, si planea escribir un script que desea que muchos desarrolladores puedan ejecutar fácilmente, le recomiendo que elija Bash. Sin embargo, esto no debería impedirle usar Z shell si su objetivo final es más adecuado para Z shell. Encontrar la solución correcta a un problema es mucho más importante que simplemente usar lo que es popular, así que tenlo en cuenta también.

Aunque Bash es mucho más popular, eso no significa que Z Shell carezca de características útiles propias. En realidad, es muy elogiado por su uso interactivo, porque es más personalizable que Bash. Por ejemplo, las indicaciones son más flexibles. Puede mostrar un mensaje a la izquierda y otro en el lado derecho de la pantalla, muy parecido a la pantalla dividida de vim. La finalización automática también es más personalizable y en realidad es más rápida que la de Bash.

Para darle una mejor idea de qué tipo de características tiene Z shell, aquí hay una lista de cosas a las que tendrá acceso cuando use Z shell sobre Bash:

  • El comando integrado zmv puede ayudarlo a realizar cambios masivos de nombre de archivos/directorios. p.ej. para agregar '.txt' a cada nombre de archivo, ejecute zmv –C '(*)(#q.)' '$1.txt'
  • La utilidad zcalc es una gran calculadora de línea de comandos que es una forma conveniente de hacer un cálculo rápido sin salir de la terminal. Cárguelo con autoload -Uz zcalc y ejecútelo con zcalc
  • El comando zparseopts es una sola línea que le permite analizar opciones complejas que se proporcionan a su secuencia de comandos
  • El comando autopushd te ayuda a hacer popd después de usar cd para volver a tu directorio anterior
  • Soporte de punto flotante (que Bash sorprendentemente no tiene)
  • Soporte para estructuras de datos hash

También hay un montón de características que están presentes en la terminal Bash pero que están ausentes en casi todos los demás shells. Aquí hay algunos de ellos también:

  • La opción de línea de comandos –norc, que permite al usuario continuar con la inicialización del shell sin leer el archivo bash.rc
  • Usar la opción –rcfile <filename> con bash le permite ejecutar comandos desde el archivo especificado
  • Excellent características de invocación
  • Se puede invocar con el comando sh
  • Bash se puede ejecutar en un modo POSIX específico. Use set –o posix para invocar el modo o --posix al inicio
  • Puede controlar el aspecto del aviso en Bash. Establecer la variable PROMPT_COMMAND en uno o más de los caracteres especiales lo personalizará para usted
  • Bash también se puede invocar como un caparazón restringido (con rbash o --restricted ), lo que significa que ciertos comandos/acciones ya no están permitidos, como:
    • Setting or unsetting the values of the SHELL, PATH, ENV, or BASH_ENV variables
    • Redirecting output using the '>', '>|', '<>', '>&', '&>', and '>>' redirection operators
    • Parsing the value of SHELLOPTS from the shell environment at startup
    • Using the exec builtin to replace the shell with another command.
    • And many more...

Es difícil decir qué caparazón es realmente mejor. Realmente todo depende de sus propias preferencias y de lo que realmente quiera hacer con el caparazón. En el caso de Bash vs Z shell, ninguno es realmente mejor que el otro.

Hay bastantes fanáticos del shell Z en toda la comunidad de desarrolladores que lo defienden en gran medida gracias a las muchas características útiles que ofrece. Por otro lado, hay aún más fanáticos de Bash que saben que su mayor ventaja es su base de usuarios mucho más grande. Es fácil ver por qué es tan difícil lograr que los desarrolladores cambien de Z shell a Bash y viceversa.

Más información {#más información}

Entonces, ¿a dónde vas desde aquí? Hay muchos detalles que dominar cuando se aprende a escribir scripts de shell. Si quieres aprender más, te sugiero tomar un curso como el [Curso de programación BASH: domina la línea de comandos de Linux](http://stackabu.se/bash-programming-course-master-linux- línea de comandos), que le enseñará casi todo lo que necesita saber sobre secuencias de comandos (específicamente en Bash), comenzando con conceptos para principiantes y avanzando hacia temas avanzados.

Con suerte, ahora tiene una idea de cómo difieren Bash y Z shell, así como sus similitudes. Existen bastantes recursos para ambos shells, por lo que no tendrá problemas para encontrar más información si la necesita.

¿Qué concha prefieres y por qué? ¡Infórmenos en la sección para comentarios!