Frameworks para Bash: ¿realmente los necesitamos? Una mirada profunda a bash-it

Después de muchos años 📅de usar bash es normal ir acumulando alias, funciones, variables, scripts, qué ponemos por aquí y por allá, con suerte en algún directorio más o menos estandar. Pero llega un momento que es difícil de manejar todo eso. De acuerdo a mi experiencia he notado que muchas veces se usa algo porque se sacó de un foro de reddit, stackoverflow, de una búsqueda en google o DuckDuckGo, de una respuesta de a un prompt en la IA... o porque alguien lo dijo. Funciona, pero no se tiene ni idea de por qué funciona.

Organización de nuestro bash profesional

Una vez en un curso un alumno me dijo:

- ¡Ahora entiendo porque hago lo que hago cada día en mi trabajo! 😀

Es imposible saber y acordarse de todo, pero tener una idea conceptual al menos general de como funcionan las cosas nos ayuda en el trabajo diario.

Por eso es importante tener en cuenta algunos conceptos de bash fundamentales.

Alias

Los alias se usan para abreviar o cambiar el comportamiento de comandos simples o repetitivos.

Por ejemplo:

alias rm ='rm -i'

De este modo, estamos cambiando el comportamiento del comando rm para que nos pregunte antes de borrar archivos. Hay otras situaciones en los cuales queremos hacer un comando mucho más sencillo:

alias dma='date +%d-%m-%y'

Funciones

Si bien los alias son muy útiles, tienen limitaciones:

❌ No se expanden de manera predeterminada en scripts.
❌ No soportan parámetros posicionales.
❌ Tienen un soporte muy estrecho para lógica condicional.

Si tenemos alguno de esos requerimientos entonces usaremos funciones, como la siguiente que sirve para ver un archivo sin líneas vacías o con "#":

clrfile () 
{ 
    if [[ $# -eq 0 ]]; then
        echo "Error: Proporciona al menos un archivo." 1>&2;
        return 1;
    fi;
    local file;
    for file in "$@";
    do
        if [[ ! -f "$file" ]]; then
            echo "Error: '$file' no es un archivo válido." 1>&2;
            continue;
        fi;
        grep -Ev '^[[:space:]]*#|^$|^[[:space:]]*;' "$file";
    done
}

Variables

A medida que vamos usando bash, encontramos la necesidad de crear variables, por ejemplo:

HISTFILESIZE=1048576
export nikola="/home/sergio/Documentos/Arts/nikola-env"
export GTK_USE_PORTAL=1

Opciones de bash

Bash posee muchas opciones que nos sirven para modificar el comportamiento del shell como vemos a continuación:

shopt -s histappend
shopt -s autocd
shopt -s dirspell
shopt -s cdspell
shopt -s cdable_vars

Con el paso del tiempo, nuestro archivo .bashrc, puede hacerse muy largo, poco claro, poco modular, o hasta incluso creamos muchos archivitos aquí y allá con funciones y/o alias como si fueran scripts. Con suerte tal vez los pongamos en ~/bin o ~ /.local/bin. Cuando llegamos a este punto tal vez estemos necesitando que nuestras herramientas estén organizadas, que manejen estándares, que podamos contar con módulos que se puedan habilitar o deshabilitar para poder administrar y/o desarrollar de manera más profesional. Es decir, necesitamos un framework.

bash-it, un framework como aliado

El shell zsh usa un framework llanado "Oh My Zsh". Sin embargo, las distribuciones principales, a excepción de Kali, el resto usa bash de manera predeterminada. Así que en muchos casos no tiene sentido invertir tiempo en cambiarse a zsh 😄. Y en particular para los que quieran aprender Linux, recomiendo que comiencen con Bash, luego si tienen tiempo y el ámbito corporativo se los permite podrán explorar Zsh como una excelente alternativa.

Por lo tanto, ¿qué tenemos para bash? En un principio encontré que justamente existe: Oh My Bash. Este proyecto usa el popular pero no por eso recomendado método de instalación desde el punto de vista de la seguridad que consiste en "curl-pipe-script". Sin embargo, ciertos problemas de Instalación manual con OMB, me llevaron a considerar a bash-it por tener mejores métricas:

Estas estadísticas hacen que más allá del bonito sitio que armó la comunidad de Oh My Bash eligiera bash-it:

Comarativas de repos bash-it y Oh My Basg

✅ ¿Es técnicamente confiable Bash-it para producción?

No vamos a encontrar a bash-it en repositorios de las distribuciones principales, sin embargo desde un punto de vista técnico puro, Bash-it es bastante seguro porque:

✔️ No requiere privilegios especiales (se instala en el home del usuario).
✔️ Usa código abierto auditable (podés revisar cada plugin, alias, función).
✔️ Es fácil de activar/desactivar funcionalidades individuales (plugins, alias, temas).
✔️ Está diseñado para usarse solo en entornos interactivos, no impactando scripts automáticos.

Sin embargo, la confiabilidad depende mucho del criterio de quien lo administra.

🔐 ¿Consideraciones de seguridad para entorno corporativo?

⚠️ Es código abierto no revisado oficialmente por las distribuciones más populares, por lo cual debés auditar lo que habilitás.
⚠️ Debe implementarse con criterio, evitando plugins que hagan conexiones externas automáticas o definan alias potencialmente riesgosos.
⚠️ Es aconsejable versionar y usar un fork corporativo que controles.

🚨 ¿Riesgos o precauciones a considerar?

❌ Podrías introducir complejidad innecesaria si el equipo no está acostumbrado a Bash avanzado.
❌ Posibilidad de romper comandos estándar con alias mal elegidos.
❌ Necesidad de capacitación interna sobre su uso para evitar malentendidos.

💡 Recomendaciones profesionales (cómo hacerlo confiable):

📌 Usá un fork interno auditado por el equipo de seguridad o infraestructura.
📌 Instalá solo plugins y funcionalidades que realmente necesitás.
📌 No habilites funciones o plugins "experimentales" o desconocidos.
📌 Documentá claramente qué está habilitado y por qué.

Hechas las aclaraciones en las que me siento obligado a hacer, vayamos al procedimiento de instalación 😄.

Instalación de bash-it

Clonamos el repositorio y ejecutamos el script de instalación:

 git clone --depth=1 https://github.com/Bash-it/bash-it.git ~/.bash_it
 ~/.bash_it/install.sh

El script nos va a preguntar si queremos mantener el archivo ~/.bashrc o sobrescribir el archivo y crear un backup (comportamiento por default) o bien agregarlo al final de ~/.bashrc.

Instalación de bash-it

¿Dónde guardamos nuestras configuraciones?

Sea que necesitemos agregar nuestras propias configuraciones o rescatarlas del archivo de backup ~/.bashrc.bak es importante comprender donde tenemos que guardar cada cosa, para eso contamos la siguiente tabla:

Configuración Ubicación
Alias ~/.bash_it/aliases/custom.aliases.bash
Funciones ~/.bash_it/lib/custom.bash
Opciones de shell ~/.bash_it/lib/custom.bash
Variables ~/.bash_it/lib/custom.bash
Autocompletados completion/custom.completion.bash
Funciones
agrupadas
plugins/custom.plugins.bash
Temas custom/themes/mi-tema/mi-tema.theme.bash

¿Dónde colocar nuestros scripts?

Aquí, abro un paréntesis, ya que es importante que entendamos que si contamos con scripts más complejos, lo recomendable es que esté en algún directorio de nuestro path tal como ~/.local/bin. No sería conveniente sobrecargar el entorno, es decir, usarlo con bash-it. Si estamos en duda podemos responder algunas de estas preguntas, frente a un determinado script:

✔️ ¿Tienen su propio #!/bin/bash?

✔️ ¿Son ejecutables y no deben ser cargados en el entorno de bash?

✔️ ¿Pueden usarse desde cualquier shell?

✔️ ¿Podrían ser usados por otros scripts o tareas automatizadas?

✔️ ¿Dependen del contexto del entorno interactivo?

Si la respuesta para una o más a estas preguntas es afirmativa entonces lo mejor es incluirlo dentro de bash-it.

Gestión de alias de bash-it

Podemos ver los alias habilitados con el comando siguiente:

bash-it help aliases

Ese comando nos va a mostrar en principio, los alias clasificados en dos categorías: general y custom. Si queremos ver los alias que tenemos disponibles, ejecutamos:

bash-it help aliases | less

Si queremos habilitar los alias para ansible

bash-it enable alias ansible
ansible enabled with priority 150.
cat .bash_it/enabled/150---ansible.aliases.bash 
# shellcheck shell=bash
about-alias 'ansible abbreviations'

alias ans=ansible
alias ap=ansible-playbook      

En el ejemplo de arriba podemos inspeccionar los alias activados.

¿Cómo ver y activar plugins?

Las funciones son un grupo de funciones relacionados un tema.

bash-it show plugins | fgrep "[x]"
base                 [x]        miscellaneous tools

bash-it enable plugin fzf

⚠ A veces es necesario ejecutar bash-it restart para que aplique un cambio, por ejemplo la eliminación de un alias.

¿Cómo activar temas?

Bash-it cuenta con una gran cantidad de temas para darle un aspecto visual al shell

ls ~/.bash_it/themes/
90210            candy                        elixr                  liquidprompt  nwinkler                pure          slick
agnoster         clean                        emperor                luan          nwinkler_random_colors  purity        standard
atomic           codeword                     envy                   mairan        oh-my-posh              radek         tonka
axin             cooperkid                    essential              mbriggs       p4helpers.theme.bash    rainbowbrite  tonotdo
bakke            cupcake                      font                   metal         parrot                  ramses        tylenol
barbuk           demula                       gallifrey              minimal       pete                    rana          wanelo
base.theme.bash  dos                          githelpers.theme.bash  modern        powerline               redline       zitron
binaryanomaly    doubletime                   gitline                modern-t      powerline-multiline     rjorgenson    zork
bira             doubletime_multiline         hawaii50               modern-time   powerline-naked         robbyrussell
bobby            doubletime_multiline_pyonly  inretio                morris        powerline-plain         roderik
bobby-python     dulcie                       iterate                n0qorg        powerturk               sexy
brainy           duru                         kitsune                newin         primer                  simple
brunton          easy                         lambda                 norbu         pro                     sirup

Para cambiar un tema hay que editar una variable y reiniciar bash-it. Buscar en ~./.bashrc y cambiarla por el tema que nos guste (el predetermindo es bobby):

export BASH_IT_THEME='bobby'

🧩 ¿Entonces qué significa que Bash-it es un framework?

Significa que Bash-it provee un entorno estructurado y modular para personalizar tu shell Bash, con:

Elemento del framework ¿Qué ofrece?
📁 Estructura de directorios Carpetas organizadas (aliases/, plugins/, completion/, themes/)
⚙️ Convenciones Nombres de archivos (custom.aliases.bash, custom.plugins.bash)
🧰 Herramientas Comandos como bash-it enable, bash-it reload
📦 Contenido reutilizable Alias, funciones, completions y temas listos para usar o modificar
🔌 Modularidad Activar o desactivar componentes sin tocar .bashrc directamente
🚀 Extensibilidad Agregás tus propios módulos sin romper la base (custom/ y enabled/)

🧪 Comparación simple

Sin framework (bash "a mano") Con Bash-it
.bashrc lleno de alias y funciones Alias y funciones separados por módulo
No hay forma de desactivar cosas fácilmente bash-it disable alias docker
No hay temas de prompt Temas configurables (BASH_IT_THEME=...)
Todo depende de cómo lo escribas vos Hay convenciones y helpers

🔧 Troubleshooting

La mejor manera de descargar falsos positivos es instalar bash-it en contenedor podman o docker. Una vez que lo probamos allí y descartamoos que haya algo inherente a bash-it o al propio contendor. Luego podemos probarlo en la máquina que tiene el problema creando un usuario de prueba y realizar las siguientes pruebas.

Comparación de archivos de configuración

diff -u /home/sergio/.bashrc /home/test/.bashrc
diff -u /home/sergio/.bash_profile /home/test/.bash_profile

Verificar múltiples cargas de un determinado componente

Por ejemplo, si tenemos sourceado fzf en otro lugar además del plugin de fzf, tendrá problemas al hacer autocompletados de rutas inexistentes, y bash se colgará.

grep -r fzf ~/.bash*

Deshabilitar bash-it temporalmente

cp ~/.bashrc ~/.bash.bash-it
cp ~/.bashrc.bak ~/.bashrc
source `~/.bashrc`

Luego se puede realizar el proceso inverso si estamos en condiciones de volver a cargar bash-it.

✅ Conclusión

Bash-it un framework es decir que no es solo una colección de scripts, sino una forma organizada, modular y extensible de gestionar tu entorno de Bash, con convenciones y herramientas que te permiten escalar y mantener esa personalización de forma profesional.

Nos puede proporcinar un salto de calidad en el uso de bash. Por supuesto, ningún software es perfecto. Muchos plugins por ejemplo, tienen funcionalidades obsoletas o que no existen más. Y recordar que bash-it puede ser confiable en producción, siempre que:

✔️ Sea auditado y validado por tu equipo.
✔️ Se mantenga un control estricto sobre lo que se habilita.
✔️ Se provea capacitación a los usuarios.

Si no estás dispuesto a mantener estos controles internos, entonces sería más seguro no utilizarlo y seguir con .bashrc tradicionales o scripts controlados internamente.

De todas maneras esas tres condiciones: ¿no deberían aplicarlse a cualquier herramienta que se quiera adoptar?

Por otro lado, probar bash-it me sirvió para revisar configuraciones que venía acumulando con los años, muchas de ellas, las eliminé y otras las mejoré para adoptar las mejores prácticas de bash. Indudablemente un sysadmin experimentado podrá probablemente prescindir de bash-it, y usar una configuración ajustada a sus necesidades. Y ese es el aporte de bash-it, hacernos ver que podemos tener una configuración mucho más modular y ordenada.

¿Cuándo fue la última vez que verificaste tu entorno de shell?

🔗 Recursos recomendados para aprovechar a fondo Bash

🔖 Bash Manual (GNU)
La referencia canónica de Bash. Leé esto si querés entender cómo y por qué funciona Bash, no solo qué comandos usar.

🔖 Repositorio oficial de Bash-it
Tu punto de partida para transformar Bash en un entorno potente, modular y personal.

🔖 The Bash Hackers Wiki
Recurso mantenido por la comunidad técnica, con explicaciones brillantes sobre los aspectos más sutiles del shell.

🔖 Greg's Wiki – Bash Pitfalls
Una lista imprescindible de errores comunes en Bash, explicados por uno de los gurús del scripting shell.

🔖 Checks – ShellCheck Wiki
Una guía didáctica, profunda y sin concesiones. Ideal para quienes ya programan pero quieren escribir Bash de verdad. ShellCheck es una extraordinaria herramienta para verificar la calidad de nuestrs scrits y configuracines de bash. Aquí podemos consultar los SC codes,

Comentarios

Comments powered by Disqus