¿Cuál es la diferencia entre Bash, Zsh y otros shells de Linux?

La mayoría de las distribuciones de Linux incluyen el shell bash de forma predeterminada, pero también puede cambiar a otro entorno de shell. Zsh es una alternativa particularmente popular, y hay otras conchas, como ash, dash, fish y tcsh. Pero, ¿cuál es la diferencia y por qué hay tantos?

¿Qué hacen las conchas?

Cuando inicia sesión en la línea de comandos o inicia una ventana de terminal en Linux, el sistema inicia el programa de shell. Los shells ofrecen una forma estándar de ampliar el entorno de la línea de comandos. Puede cambiar el shell predeterminado por otro, si lo desea.

El primer entorno de shell fue Thompson Shell, desarrollado en Bell Labs y lanzado en 1971. Los entornos de Shell se han basado en el concepto desde entonces, agregando una variedad de nuevas características, funcionalidades y mejoras de velocidad.

Por ejemplo, Bash ofrece finalización de comandos y nombres de archivos , funciones avanzadas de secuencias de comandos , un historial de comandos , colores configurables, alias de comandos y una variedad de otras funciones que no estaban disponibles en 1971 cuando se lanzó el primer shell.

El shell también se utiliza en segundo plano por varios servicios del sistema. Las distribuciones de Linux incluyen muchas funciones escritas como scripts de shell. Estos scripts son comandos y otras funciones avanzadas de script de shell se ejecutan en el entorno de shell.

Conchas que conducen a Bash: sh, csh, tsh y ksh

El progenitor más prominente de los proyectiles modernos es el caparazón Bourne, también conocido como «sh», que lleva el nombre de su creador Stephen Bourne, quien trabajó en los laboratorios Bell de AT&T. Lanzado en 1979, se convirtió en el intérprete de comandos predeterminado en Unix debido a su soporte para sustitución de comandos, canalización, variables, pruebas de condición y bucle, junto con otras características. No ofrecía mucha personalización para los usuarios y no admitía sutilezas tan modernas como alias, finalización de comandos y funciones de shell (aunque esta última finalmente se agregó).

El shell C, o «csh», fue desarrollado a finales de la década de 1970 por Bill Joy en la Universidad de California, Berkley. Agregó una gran cantidad de elementos interactivos con los que los usuarios podían controlar sus sistemas, como alias (atajos para comandos largos), habilidades de administración de trabajos, historial de comandos y más. Se modeló a partir del lenguaje de programación C, en el que estaba escrito el propio sistema operativo Unix. Esto también significaba que los usuarios del shell Bourne tenían que aprender C para poder introducir comandos en él. Además, csh tenía bastantes errores que los usuarios y creadores debían resolver durante un largo período de tiempo. La gente terminó usando el shell Bourne para los scripts porque manejaba mejor los comandos no interactivos, pero se quedó con el shell C para un uso normal.

Relacionado:  Cómo funciona el nuevo Centro de control en macOS Big Sur

Con el tiempo, muchas personas corrigieron errores y agregaron funciones al shell C, culminando en una versión mejorada de csh conocida como “tcsh”. Pero csh seguía siendo el predeterminado en las computadoras basadas en Unix y había agregado algunas características no estándar. David Korn de Bell Labs trabajó en KornShell, o «ksh», que intentó mejorar la situación siendo compatible con versiones anteriores del lenguaje del shell Bourne pero añadiendo muchas características del shell csh. Fue lanzado en 1983, pero con una licencia propietaria. No fue software gratuito hasta la década de 2000, cuando se lanzó con varias licencias de código abierto.

El nacimiento de bash

La interfaz del sistema operativo portátil para Unix, o POSIX, fue otra respuesta a las agitadas implementaciones de csh propietarias. Creó con éxito un estándar para la interpretación de comandos (entre otras cosas) y, finalmente, reflejó muchas de las características de KornShell. Al mismo tiempo, el Proyecto GNU intentaba crear un sistema operativo gratuito compatible con Unix. El Proyecto GNU desarrolló un shell de software libre para ser parte de su sistema operativo libre y lo llamó “Bourne Again Shell” o “bash”.

Bash se ha mejorado en las décadas desde su primer lanzamiento en 1989, pero sigue siendo el shell predeterminado en la mayoría de las distribuciones de Linux en la actualidad. También es el shell predeterminado en macOS de Apple y está disponible para su instalación en Windows 10 de Microsoft .

Conchas más nuevas: ash, dash, zsh y fish

Si bien la comunidad de Linux se ha asentado en Bash en los años posteriores, los desarrolladores no dejaron de crear nuevos shells cuando Bash se lanzó por primera vez hace 28 años.

Kenneth Almquist creó un clon de caparazón de Bourne conocido como caparazón de Almquish, A Shell, «ceniza» o, a veces, simplemente «sh». también era compatible con POSIX y se convirtió en el shell predeterminado en BSD , una rama diferente de Unix. El ash shell es más ligero que bash, lo que lo hace popular en sistemas Linux integrados. Si tiene un teléfono Android rooteado con BusyBox instalado, o cualquier otro dispositivo con el paquete de software BusyBox, está usando código de ash.

Relacionado:  Cómo ver todas sus contraseñas de Wi-Fi guardadas en macOS

Debian desarrolló un entorno de shell basado en ash y lo llamó «dash». Está diseñado para ser liviano y compatible con POSIX, por lo que es más rápido que Bash, pero no tendrá todas sus características. Ubuntu usa el shell del tablero como su shell predeterminado para tareas no interactivas, acelerando los scripts de shell y otras tareas que se ejecutan en segundo plano. Ubuntu todavía usa bash para shells interactivos, sin embargo, los usuarios todavía tienen el entorno interactivo con todas las funciones.

Uno de los shells más nuevos y populares es Z shell o «zsh». Creado por Paul Falstad en 1990, zsh es un shell de estilo Bourne que contiene las características que encontrará en bash, y aún más. Por ejemplo, zsh tiene corrección ortográfica, la capacidad de observar inicios / cierres de sesión, algunas funciones de programación integradas como código de bytes, soporte para notación científica en sintaxis, permite aritmética de punto flotante y más funciones.

Otro shell más nuevo es el Friendly Interactive Shell, o «pez», lanzado en 2005. Tiene una sintaxis de línea de comandos única que está diseñada para ser un poco más fácil de aprender, pero no se deriva del shell Bourne ni del shell C. Es una idea interesante, pero lo que aprenda mediante el uso de peces no necesariamente lo ayudará a usar bash y otras conchas derivadas de Bourne.

¿Cuál debería elegir? (y por qué Zsh es popular)

No es necesario elegir un caparazón. Su sistema operativo elige su shell predeterminado por usted, y esa elección casi siempre es bash. Siéntese frente a una distribución de Linux, o incluso una Mac, y casi siempre tendrá un entorno de shell bash. Bash tiene bastantes funciones avanzadas, pero probablemente no las usará a menos que programe scripts de shell.

En sistemas Linux embebidos o sistemas BSD, terminará con el shell ash. Pero ash es un shell basado en Bourne y es en gran parte compatible con bash. Cualquier conocimiento que tenga del uso de bash se transferirá al uso de un shell ash o dash, aunque algunas funciones avanzadas de scripting no están disponibles en este shell ligero.

Casi todos los shell que encontrará están basados ​​en Bourne y funcionan de manera similar, incluido zsh.

Por eso zsh es popular. Este nuevo shell es compatible con bash, pero incluye más funciones. El shell zsh ofrece corrección ortográfica incorporada, finalización mejorada de la línea de comandos, módulos cargables que actúan como complementos para su shell, alias globales que le permiten alias nombres de archivos o cualquier otra cosa en la línea de comandos en lugar de solo comandos, y más apoyo temático. Es como bash, pero con muchos extras, funciones adicionales y opciones configurables que puede apreciar si pasa mucho tiempo en la línea de comandos.

Relacionado:  Cómo agregar datos a la pantalla Today de la aplicación Health en iPhone

Si está familiarizado con bash, puede cambiar a zsh sin aprender una sintaxis diferente; solo obtendrá funciones adicionales. si está familiarizado con zsh, puede cambiar a bash sin aprender una sintaxis diferente, simplemente no tendrá acceso a esas funciones.

» Oh My ZSH » es una herramienta que le ayuda a habilitar más fácilmente los complementos de zsh y cambiar entre temas prefabricados, personalizando rápidamente su shell de zsh sin pasar horas ajustando cosas.

También hay otras conchas. Por ejemplo, el shell tcsh todavía está disponible y sigue siendo una opción. FreeBSD usa tsch como su shell raíz predeterminado y ash como su shell interactivo predeterminado. Si usa la programación en C con regularidad, tsch podría ser más adecuado para usted. Sin embargo, no es tan común como bash o zsh.

Cómo cambiar entre proyectiles

Es fácil cambiar a un nuevo shell para probarlo. Simplemente instale el shell desde el administrador de paquetes de su distribución de Linux y escriba el comando para iniciar el shell.

Por ejemplo, digamos que quiere probar zsh en Ubuntu. Ejecutaría los siguientes comandos para instalar y luego ejecutarlo:

sudo apt install zsh

zsh

Entonces estarías sentado en un caparazón zsh. Escriba ” exit” en el shell para dejarlo y volver a su shell actual.

Esto es solo temporal. Siempre que abra una nueva ventana de terminal o inicie sesión en su sistema en la línea de comando, verá su shell predeterminado. Para cambiar el shell que ve cuando inicia sesión, conocido como su shell de inicio de sesión, generalmente puede usar el chshcomando, o «Cambiar Shell».

Para usar este comando, primero deberá encontrar la ruta completa a su shell con el comando which. Por ejemplo, digamos que queremos cambiar al shell zsh. Ejecutaríamos el siguiente comando:

cual zsh

En Ubuntu, esto nos dice que el binario zsh está almacenado en / usr / bin / zsh.

Ejecute el siguiente comando, ingrese su contraseña y se le pedirá que elija un nuevo shell de inicio de sesión:

chsh

Según el comando anterior, entraríamos /usr/bin/zsh. El shell zsh sería nuestro predeterminado hasta que ejecutamos el chsh comando y lo volviéramos a cambiar.