Comúnmente, cuando hablamos de servidores Linux o contenedores Docker, generalmente nos referimos a una interfaz de línea de comandos, shell o experiencia de terminal. Hay dos shells ampliamente utilizados por la comunidad:Bash y Zsh. El Bash se considera el caparazón más utilizado. Al mismo tiempo, Z shell o Zsh se vuelve cada vez más popular en la actualidad. Entonces, ¿qué terminal deberías elegir? En este artículo, compararemos Bash vs Zsh e intentaremos responder a la pregunta de qué terminal es mejor.
Bash shell (Bourne Again Shell) se introdujo en 1989 para reemplazar a Bourne Shell y se convirtió rápidamente en el shell predeterminado de Linux. Bash es capaz de realizar una amplia gama de soluciones de programación y tareas automatizadas en Linux, pero ese no es el único shell que puede usar. Hay varios otros shells que pueden realizar funciones similares a Bash.
Uno de ellos es Zsh, que se creó en 1990 como un shell Bourne ampliado con muchas características adicionales de Bash, ksh y tcsh. Si eres usuario de Linux, no tienes que instalar Zsh por separado ya que viene incluido por defecto en casi todas las distribuciones modernas. Bash y Zsh comparten algunas características, pero también hay muchas diferencias entre estos shells, que describiremos en este artículo. Este artículo cubre las siguientes secciones:
Ahora vayamos a la primera sección de este artículo.
En esta parte cubriremos las diferencias más importantes.
Zsh | Golpe |
Contiene muchas características avanzadas. | No contiene funciones avanzadas. |
Tiene una estructura de archivos de configuración más compleja. | La estructura de los archivos de configuración es simple. |
La configuración y la personalización son proporcionadas por el marco Oh My Zsh. | Bash-it proporciona configuración y personalización. |
El historial de comandos se comparte entre todos los shells. | Compartir la historia es difícil. |
Los scripts Zsh no se usan tanto. | Los scripts Bash se utilizan mucho. |
Zsh no carga SHELLOPTS durante el inicio. | SHELLOPTS se cargan durante el inicio. |
La configuración del entorno es más personalizable con zshrc , zlogin , zshenv , zlogout , zprofile . | El entorno es menos personalizable y se puede implementar con menos scripts. |
Permite usar alias expandidos en cualquier parte del archivo. | Bash no admite los alias expandidos de forma predeterminada. |
zparseopts hace que el análisis de los argumentos de los scripts sea muy fácil. | Análisis de argumentos de script con getopts es un poco más desafiante. |
Los cálculos de terminal se pueden hacer usando zcalc . | Necesita usar dos calculadoras externas:bc y expr . |
La configuración del terminal/los scripts de inicio automático se cargan desde ~/.zshrc archivo. | Los scripts de configuración/inicio automático del terminal se cargan desde ~/.bashrc archivo. |
bindkey se utiliza para el enlace de claves. | bind integrado y ~/.inputrc se utilizan para el enlace de teclas. |
Más opciones para crear avisos elegantes. | Menos opciones para avisos sofisticados. |
setopt responsable de la configuración de shell. | shopt configura los ajustes de shell. |
# no se considera un comentario a menos que INTERACTIVE_COMMENTS está configurado. | # representa una cadena de comentarios. |
Patrones comodín extendidos habilitados de forma predeterminada. | Utilice shopt -s extglob para habilitar patrones de comodines extendidos. |
Más formas de transformar el valor de la variable (expansión de parámetros). | Menos métodos para transformar variables. |
Tiene funciones de autocompletado y corrección ortográfica integradas. | Necesitas usar bash-completion paquete. |
Más complementos y temas disponibles. | Menos complementos y temas disponibles. |
Zsh es más personalizable. | Bash es menos personalizable. |
Compatible con POSIX si emulate sh se ha establecido. | Siga los estándares POSIX si
--posix
se estableció la opción de línea de comandos. |
La finalización automática funciona más rápido. | La finalización automática es más lenta. |
Comunidad más pequeña | Comunidad más amplia |
Bash vs Zsh:volumen de búsqueda en Internet
Aquí hay un gráfico de Google Tends, que muestra la comparación del volumen de búsqueda para ambos shells:
Bash vs Zsh – UX
En esta sección, revisaremos las funciones de shell de UX más utilizadas, que usa a diario.
Configuración del contenedor Docker
Si solo desea probar los siguientes ejemplos, la mejor manera de hacerlo es iniciar el contenedor Docker de Ubuntu:
docker run -it ubuntu:20.04 /bin/bash
El contenedor Docker no tiene Zsh instalado de forma predeterminada, por lo que debe instalarlo primero:
apt-get update
apt-get install -y zsh
Finalmente, puede ejecutar zsh shell:
zsh
Pestaña para autocompletar
La pestaña Tab
el uso de claves en Zsh y Bash es un poco diferente. Vamos a crear un par de directorios anidados para ilustrar este ejemplo:
mkdir -p onedrive/docs
mkdir -p onedrive/pics
En Bash, tienes que usar Tab
tecla para completar automáticamente la ruta al directorio o archivo.
Por ejemplo, escriba uno , luego presione Tab
, el tipo d y presiona Tab
de nuevo para finalizar la ruta en la terminal:
cd onedrive/docs
El resultado esperado debería verse así:
En Zsh, uso de la Tab
le proporcionará la lista de opciones disponibles para seleccionar.
Escriba uno y presiona Tab
, luego presione Tab
de nuevo tantas veces como desee para seleccionar el directorio requerido:
Corrección ortográfica
La funcionalidad de corrección ortográfica es compatible con los shells Zsh y Bash. Sin embargo, Zsh lo hace de manera más efectiva.
En el siguiente ejemplo, aprenderá cómo habilitar Zsh y Bash para corregir la ortografía automáticamente.
Vamos a crear un directorio llamado onedrive
, si no lo hizo en la parte anterior del artículo:
mkdir -p onedrive
Ahora hagamos un error tipográfico en el comando de shell Bash:
cd onedrave
Bash shell no corregirá el error de tipeo de “dra ve” a “dri ve” y muestra el error “No existe tal archivo o directorio. ”
Para habilitar la función de revisión ortográfica automática en bash, debe editar la configuración de Bash.
nano ~/.bashrc
Agregue la siguiente línea al final del archivo:
shopt -s cdspell
Usa la source
comando para aplicar cambios al shell.
source ~/.bashrc
Vuelva a ejecutar el comando mal escrito. El terminal Bash corrigió automáticamente el error tipográfico:
cd onedrave
¿Qué pasa con Zsh?
Escribamos mal el comando "echo" para verificar si Zsh lo detecta y lo corrige automáticamente:
ehco "Hello World"
Como era de esperar, Zsh no corrigió la ortografía.
Ahora, haremos algunos cambios en la configuración de Zsh.
nano ~/.zshrc
Activa la correctexport
opción para el caparazón. También puede especificar un mensaje de aviso:
setopt correct
export SPROMPT="Correct %R to %r? [Yes, No, Abort, Edit ]"
No se preocupe si el archivo está vacío, está bien, se completará con una configuración adicional tan pronto como instalemos Oh My Zsh más tarde.
Así es como debería verse si nos sigue en el contenedor Docker:
Ejecuta el source
comando para aplicar cambios al shell.
source ~/.zshrc
Ejecute el echo
mal escrito comando de nuevo:
ehco "Hello World"
¡Aquí tienes!
El corrector ortográfico automático ahora está habilitado:
Temas
Debe instalar Git para poder usar cualquier tema y personalización de Bash o Zsh:
apt-get install -y git
Para instalar personalizaciones para el shell Bash, use el siguiente comando:
git clone --depth=1 https://github.com/Bash-it/bash-it.git ~/.bash_it
El proceso de instalación es muy simple:
~/.bash_it/install.sh
Ahora podemos editar ~/.bashrc
archivo para editar el tema de Bash:
nano ~/.bashrc
Cambiar BASH_IT_THEME
valor variable a cualquier tema que exista en el paquete de temas, por ejemplo, pruebe envy .
Para aplicar los cambios, ejecute el siguiente comando:
source ~/.bashrc
Ahora, personalicemos Zsh.
Como se mencionó anteriormente, el marco Oh My Zsh ofrece muchas funciones útiles y una amplia colección de temas.
La instalación de Oh My Zsh tampoco es muy difícil:
apt install -y curl wget git
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Solo responde S a todas las preguntas y obtendrá una hermosa personalización de shell por defecto:
Ahora, los temas de Zsh se encuentran en:~/.oh-my-zsh/themes
carpeta:
ls ~/.oh-my-zsh/themes/
Aquí puede ver los nombres de los temas incluidos en el paquete.
El tema predeterminado de Zsh es "robbyrussell “. Para modificar este tema, actualice el ZSH_THEME
valor variable en ~/zshrc
archivo:
nano ~/.zshrc
Ahora edite el ZSH_THEME
valor variable para configurar un nuevo tema para su terminal. Aquí hay una lista de ejemplos de UX.
Para aplicar los cambios, utilice la source
comando:
source ~/.zshrc
Expansión comodín
Los nombres de archivo se utilizan para coincidir con los comodines. Bash tiene esta función incorporada, mientras que para Zsh, debe habilitar la expansión de comodines configurando el subconjunto global.
Vamos a crear un par de .txt
archivos en Bash:
touch text_file1.txt
touch text_file2.txt
ls
Ahora, podemos listar nuestro .txt
archivos utilizando la expresión comodín en una variable:
files="*.txt"
echo $files
En Zsh, este enfoque no funcionará de forma predeterminada:
touch text_file1.txt
touch text_file2.txt
ls
file="*.txt"
echo $file
set -o GLOB_SUBST
file="*.txt"
echo $file
¡Ahora, las expresiones comodín están funcionando!
Ponga esta opción en ~/.zshrc
, si desea mantener ese comportamiento de Zsh en el futuro:
set -o GLOB_SUBST
Resumen
Tanto Zsh como Bash son shells extremadamente potentes con muchas extensiones y opciones de configuración. Zsh tiene una sólida personalización, extensibilidad y características avanzadas. Bash aún se usa más ampliamente, así que piense en la compatibilidad con versiones anteriores de sus scripts con otros sistemas que pueda necesitar administrar.
Mi elección personal es Zsh cuando se trata de una computadora portátil personal y Bash cuando se trata de actividades de administración de un servidor.
Espero que este artículo te haya resultado útil. Si es así, ¡ayúdanos a difundirlo por todo el mundo!