Diseño de CLIs Profesionales: Colores ANSI, Menús y TUI con whiptail
Un script de administración no tiene por qué ser una sucesión monótona de texto plano en blanco y negro. Para crear herramientas de línea de comandos (CLI) que resulten intuitivas y profesionales, Bash permite incorporar colores ANSI, funciones de logging visual, menús interactivos e interfaces TUI (Terminal User Interface) completas con diálogos gráficos en consola.
1. Códigos de Escape y Colores ANSI #
Los códigos de escape ANSI permiten cambiar el color de texto, el fondo y los estilos (negrita, subrayado) en cualquier terminal moderna:
1#!/usr/bin/env bash 2 3 # Definición de paleta de colores ANSI 4readonly COLOR_RESET=$'\e[0m' 5readonly BOLD=$'\e[1m' 6readonly RED=$'\e[31m' 7readonly GREEN=$'\e[32m' 8readonly YELLOW=$'\e[33m' 9readonly BLUE=$'\e[34m' 10readonly CYAN=$'\e[36m' 11 12 # Funciones estándar de registro visual 13log_info() { echo -e "${BLUE}${BOLD}[INFO]${COLOR_RESET} $*"; } 14log_success() { echo -e "${GREEN}${BOLD}[OK]${COLOR_RESET} $*"; } 15log_warn() { echo -e "${YELLOW}${BOLD}[AVISO]${COLOR_RESET} $*"; } 16log_error() { echo -e "${RED}${BOLD}[ERROR]${COLOR_RESET} $*" >&2; } 17 18log_info "Iniciando proceso de sincronización..." 19log_success "Conexión establecida con éxito." 20log_warn "El disco principal supera el 80% de ocupación." 21log_error "Fallo al conectar con la base de datos."
2. Menús Nativos con select y Captura Interactiva con read #
Bash ofrece la estructura nativa select para crear menús interactivos numerados de forma instantánea:
1#!/usr/bin/env bash 2 3PS3="Selecciona una opción (1-4): " 4opciones=("Ver espacio en disco" "Reiniciar Nginx" "Hacer Backup" "Salir") 5 6select opt in "${opciones[@]}"; do 7 case "$opt" in 8 "Ver espacio en disco") 9 df -h 10 ;; 11 "Reiniciar Nginx") 12 sudo systemctl restart nginx 13 ;; 14 "Hacer Backup") 15 ./backup.sh 16 ;; 17 "Salir") 18 echo "Saliendo del asistente..." 19 break 20 ;; 21 *) 22 echo "Opción no válida. Inténtalo de nuevo." 23 ;; 24 esac 25done
3. Interfaces de Usuario en Terminal (TUI) con whiptail #
whiptail viene preinstalado por defecto en la inmensa mayoría de distribuciones Linux basadas en Debian, Ubuntu y Red Hat, permitiendo renderizar ventanas de diálogo con bordes, botones y sombras en la terminal:
1#!/usr/bin/env bash 2 3 # 1. Cuadro de confirmación Sí / No 4if whiptail --title "Confirmación" --yesno "¿Deseas purgar la base de datos temporal?" 10 60; then 5 echo "El usuario seleccionó Sí." 6else 7 echo "El usuario canceló la operación." 8fi 9 10 # 2. Cuadro de entrada de texto 11NOMBRE=$(whiptail --title "Nuevo Usuario" --inputbox "Introduce el nombre del desarrollador:" 10 60 3>&1 1>&2 2>&3) 12echo "Usuario registrado: $NOMBRE" 13 14 # 3. Menú interactivo de selección 15OPCION=$(whiptail --title "Panel de Control" --menu "Elige la acción a realizar:" 15 60 4 \ 16 "1" "Iniciar servidor web" \ 17 "2" "Detener servicios" \ 18 "3" "Ver logs de errores" \ 19 3>&1 1>&2 2>&3) 20 21echo "Opción elegida: $OPCION"
4. Spinners Animados para Procesos en Segundo Plano #
Para mejorar la experiencia de usuario durante operaciones lentas (como compilar, descargar paquetes o hacer copias pesadas), un spinner animado indica que el proceso sigue vivo:
1#!/usr/bin/env bash 2 3mostrar_spinner() { 4 local pid=$1 5 local delay=0.1 6 local spinstr='|/-\' 7 8 tput civis # Ocultar cursor 9 while kill -0 "$pid" 2>/dev/null; do 10 local temp=${spinstr#?} 11 printf " [%c] Procesando tarea..." "$spinstr" 12 spinstr=$temp${spinstr%"$temp"} 13 sleep "$delay" 14 printf "\r" 15 done 16 tput cnorm # Restaurar cursor 17 printf " \r" 18} 19 20 # Lanzar comando pesado en segundo plano (&) y mostrar spinner 21sleep 3 & 22mostrar_spinner $! 23echo -e "${GREEN}[OK] Tarea completada con éxito.${COLOR_RESET}"
Resumen del tema
Conceptos clave #
- Colores ANSI: uso de secuencias
\e[...mpara resaltar advertencias, errores y éxitos en la consola. - Estructura
select: generación rápida de menús interactivos de selección múltiple con control mediantecase. - Librería
whiptail: creación de diálogos TUI avanzados (cuadros de mensaje, confirmación yes/no, menús y barras de progreso) con redirección de descriptores (3>&1 1>&2 2>&3). - Spinners y
tput: animaciones visuales que mantienen informado al usuario durante la ejecución de subprocesos en background.
Qué debes recordar #
Diseña herramientas CLI amigables utilizando colores ANSI estructurados en funciones de log y apoyándote en whiptail para construir interfaces interactivas profesionales sin dependencias externas pesadas.