#!/bin/bash # Script: install_list_asdf.sh # Descripción: Este script automatiza la gestión de programas y versiones # utilizando asdf, asegurándose de que los plugins estén # instalados, con las últimas versiones instaladas y correctamente # configuradas en global. Según lo especificado en el archivo # "lista_programas.txt". # Author: Manuel Vergara # Web: https://vergaracarmona.es # COLOR_RED='\033[0;31m' COLOR_RESET='\033[0m' # Control de salida con Ctrl + C function ctrl_c() { echo -e "${COLOR_RED}\n\n[!] Saliendo... \n${COLOR_RESET}" tput cnorm; exit 1 } # Ctrl+C trap ctrl_c SIGINT # Archivo de entrada que contiene la lista de programas input_file="lista_programas.txt" # Función para agregar un plugin asdf si no está agregado add_asdf_plugin() { local plugin="$1" if ! asdf plugin list | grep -q "$plugin"; then asdf plugin add "$plugin" fi } # Función para instalar una versión de un programa con asdf si no está instalada install_asdf_version() { local program="$1" local version="$2" local installed_versions=$(asdf list "$program" | tr -d ' ') if [ -z "$installed_versions" ]; then echo -e "\e[33mNo está instalada la versión $version de $program y se procede a hacerlo\e[0m" asdf install "$program" "$version" >/dev/null 2>&1 local exit_code=$? if [ $exit_code -eq 0 ]; then echo -e "\e[32mInstalación exitosa: $program $version\e[0m" else echo -e "\e[31mError al instalar $program $version\e[0m" fi else if ! echo "$installed_versions" | grep -q "$version"; then echo -e "\e[33mNo está instalada la versión $version de $program y se procede a hacerlo\e[0m" asdf install "$program" "$version" >/dev/null 2>&1 local exit_code=$? if [ $exit_code -eq 0 ]; then echo -e "\e[32mInstalación exitosa: $program $version\e[0m" else echo -e "\e[31mError al instalar $program $version\e[0m" fi else echo -e "\e[32m$program ya está instalado con la versión $version\e[0m" fi fi } # Función para configurar globalmente una versión de un programa con asdf si no está configurada configure_asdf_global() { local program="$1" local version="$2" local current_version=$(asdf current "$program" | awk '{print $2}') if [ "$current_version" != "$version" ]; then asdf global "$program" "$version" echo -e "\e[32mConfiguración global exitosa de $program $version\e[0m" fi } # Función para imprimir un salto de línea print_newline() { echo "" } # Recorre el archivo de entrada while IFS= read -r program; do add_asdf_plugin "$program" latest_version=$(asdf latest "$program" 2>&1) if [ $? -eq 0 ]; then install_asdf_version "$program" "$latest_version" configure_asdf_global "$program" "$latest_version" else echo -e "\e[31mError al obtener la última versión de $program: $latest_version\e[0m" fi print_newline done < "$input_file" # Listar las instalaciones actuales echo -e "\nListado de instalaciones actuales:" list_asdf_current