¿Qué es Dash? Explicación de las características y usos de este shell ligero y rápido
Cuando usas Linux o macOS, es común escuchar términos como "shell" y "Bash". Pero, ¿conoces un shell llamado Dash? De hecho, Dash es un héroe anónimo que trabaja intensamente tras bambalinas, especialmente en distribuciones de Linux basadas en Debian como Ubuntu.
Este artículo está dirigido a creadores web que han oído el nombre pero no saben mucho al respecto. Te explicaremos qué es Dash, sus características, sus diferencias con Bash y sus usos prácticos, con ejemplos de código que puedes ejecutar simplemente copiando y pegando. ¡Al final de este artículo, entenderás el atractivo de Dash y podrás usarlo de manera efectiva!
¿Qué es el shell Dash?
Dash es la abreviatura de "Debian Almquist shell" y, como su nombre indica, es un shell desarrollado por el proyecto Debian. Originalmente fue una adaptación para Linux del Almquist Shell (ash) que se usaba en NetBSD.
Su principal característica es que es ligero y rápido. "Bash", el que usamos habitualmente en la terminal, es un "shell de lujo lleno de funciones", con autocompletado de historial de comandos y prácticas funciones propias. En cambio, Dash logra una agilidad sorprendente al limitar sus funciones al conjunto mínimo definido por POSIX (un estándar para interfaces de SO portátiles).
En particular, en Ubuntu y Debian, el shell predeterminado del sistema, /bin/sh, es en realidad un enlace simbólico (como un acceso directo) a Dash. Esto permite que los scripts de inicio del sistema se ejecuten rápidamente, contribuyendo a la mejora del rendimiento general del SO.
Ventajas principales (características) de Dash
Echemos un vistazo más de cerca a lo que hace que Dash sea tan genial.
- 🚀 Velocidad de ejecución rápida: Debido a que sus funciones son simples, el inicio de programas y la interpretación de scripts son extremadamente rápidos. La diferencia de velocidad con Bash es especialmente notable en procesos que se repiten miles de veces o al ejecutar muchos scripts pequeños.
- Bajo consumo de memoria: Al ser ligero, ayuda a conservar la memoria. Esta es una ventaja significativa en sistemas embebidos con memoria limitada o en entornos de servidor que ejecutan numerosos contenedores simultáneamente.
- Conformidad con POSIX: Dash es muy fiel al estándar POSIX. Esto significa que un script de shell escrito para ejecutarse en Dash tiene una alta probabilidad de funcionar correctamente en otros shells compatibles con POSIX (como zsh en macOS). Dash sirve como un excelente entorno de prueba cuando se quiere mejorar la portabilidad y compatibilidad de los scripts.
¡Pruébalo ahora! Manos a la obra con Dash
Ver para creer. ¡Pongamos manos a la obra con Dash para experimentar sus características por nosotros mismos!
1. Verifica tu shell actual
Primero, verifiquemos cuál es tu shell predeterminado actual. Abre tu terminal y ejecuta el siguiente comando. En la mayoría de los casos, mostrará "bash" o "zsh".
$ ps -p $$
PID TTY TIME CMD
5678 pts/0 00:00:00 bash
2. Inicia Dash
Ahora, iniciemos Dash. Simplemente escribe `dash` en la línea de comandos y presiona Enter. Cuando el prompt (el símbolo de entrada) cambie a `$`, estarás en el mundo de Dash.
$ dash
$
Para volver a tu shell original (como Bash), simplemente escribe `exit`.
3. [Experiencia] Comparación de velocidad con Bash
Comparemos cuán rápido es Dash con un bucle simple. Aquí, ejecutaremos un script que simplemente cuenta de 1 a 100,000 tanto en Bash como en Dash. Puedes usar el comando `time` para medir el tiempo de procesamiento.
Primero, ejecutémoslo con Bash.
$ time bash -c 'i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done'
real 0m1.523s
user 0m1.518s
sys 0m0.005s
*El tiempo de ejecución variará según tu entorno.
A continuación, ejecutemos exactamente el mismo proceso con Dash.
$ time dash -c 'i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done'
real 0m0.384s
user 0m0.381s
sys 0m0.003s
¿Qué te parece? En mi entorno, el proceso que tardó aproximadamente 1.5 segundos en Bash se completó en poco menos de 0.4 segundos en Dash. ¡Es una diferencia de velocidad de casi 4 veces! Como puedes ver, la alta velocidad de Dash es increíblemente efectiva para ejecutar repetidamente scripts sencillos.
Puntos a tener en cuenta: Funciones presentes en Bash pero no en Dash
Aunque Dash es rápido, carece de algunas de las funciones convenientes que son estándar en Bash. Esto se conoce como "Bashism". Ten cuidado, porque si escribes un script usando la sintaxis de Bash sin darte cuenta, causará un error en Dash.
Ejemplo 1: No se pueden usar arrays
En Bash, puedes definir arrays fácilmente usando `()`, pero Dash no tiene el concepto de arrays.
En Bash (funciona correctamente)
$ bash -c 'fruits=("apple" "banana" "orange"); echo ${fruits[1]}'
banana
En Dash (resulta en un error)
$ dash -c 'fruits=("apple" "banana" "orange"); echo ${fruits[1]}'
dash: 1: Syntax error: "(" unexpected
Ejemplo 2: No se puede usar el comando de prueba extendido `[[ ... ]]`
El comando `[[ ... ]]` de Bash es muy funcional, permitiendo la comparación de cadenas y expresiones regulares, pero no forma parte del estándar POSIX. En Dash, debes usar el tradicional `[ ... ]`.
En Bash (funciona correctamente)
$ bash -c '[[ "hello" == "hello" ]] && echo "Yes"'
Yes
En Dash (resulta en un error)
$ dash -c '[[ "hello" == "hello" ]] && echo "Yes"'
dash: 1: [[: not found
Cómo escribirlo correctamente en Dash
Para hacer lo mismo en Dash, usa `[` y un solo signo de igual `=`.
$ dash -c '[ "hello" = "hello" ] && echo "Yes"'
Yes
Ejemplo 3: No se puede usar la expansión de llaves `{...}`
La expansión de llaves, que es útil para generar nombres de archivo secuenciales, también es una característica de Bash.
En Bash (funciona correctamente)
$ bash -c 'echo file-{1..3}.txt'
file-1.txt file-2.txt file-3.txt
En Dash (se muestra tal cual)
$ dash -c 'echo file-{1..3}.txt'
file-{1..3}.txt
Usos principales de Dash
Entonces, considerando estas características, ¿en qué situaciones se utiliza Dash?
- Scripts de inicio del sistema: Este es su uso más común. Acelera el tiempo de arranque al procesar rápidamente los numerosos scripts que se ejecutan cuando el SO se inicia.
- Ejecución de scripts de shell: Puedes mejorar el rendimiento escribiendo en Dash los scripts que requieren una alta velocidad de procesamiento (p. ej., análisis de grandes archivos de registro, procesamiento por lotes simple).
- Entornos con recursos limitados: Dash es el preferido en entornos con memoria y potencia de CPU limitadas, como dispositivos IoT, sistemas embebidos y contenedores Docker.
- Verificación de compatibilidad de scripts: Una buena forma de verificar si tu script de shell depende de características específicas de Bash (es decir, si es compatible con POSIX) es ejecutarlo con `dash myscript.sh`.
Por otro lado, Dash no es muy adecuado como shell interactivo (el que usamos normalmente en la terminal). Sus funciones de autocompletado de comandos, búsqueda en el historial y alias son pobres en comparación con Bash, lo que disminuiría la eficiencia de tu trabajo diario.
Conclusión: Usa Bash y Dash de forma inteligente
En este artículo, hemos explicado sobre el shell ligero y rápido, "Dash".
- Dash es un shell que busca ligereza y velocidad al limitar sus funciones. Sobresale en tareas de sistema en segundo plano y en la ejecución rápida de scripts.
- Bash es un shell multifuncional repleto de funciones convenientes. Sobresale en el uso interactivo, donde escribimos comandos a diario.
Es importante entender las fortalezas y debilidades de cada shell. No es recomendable cambiar ciegamente tu shell de inicio de sesión predeterminado de Bash a Dash solo porque "es más rápido".
Al recordar a Dash como un "héroe anónimo" que acelera tu sistema y como un "arma secreta" para hacer tus scripts de shell más rápidos, añadirás otra herramienta a tu arsenal de desarrollador. ¡Asegúrate de usar Dash donde sea más apropiado!