diff --git a/bin/zettlr_install.sh b/bin/zettlr_install.sh index 0990090..8282659 100755 --- a/bin/zettlr_install.sh +++ b/bin/zettlr_install.sh @@ -68,6 +68,24 @@ fi title="${head_000} ${head_002}" apps_title="${zl_001}" +# Función para limpiar la pantalla y salir +function finish() { + clear + exit +} + +# Función para ejecutar comandos con sudo si es necesario +run_cmd() { + if [ "$EUID" -eq 0 ]; then + "$@" + else + echo "$SUDO_PASS" | sudo -S "$@" + fi + + # Devuelve el código de estado del último comando ejecutado + return $? +} + # Verificar si se está solicitando la desinstalación UNINSTALL=0 if [ "$1" = "-u" ]; then @@ -140,8 +158,8 @@ install_zettlr_debian() { local arch=$(get_arch) echo -e "\n${head_info}: Instalando dependencias necesarias..." - sudo apt update - sudo apt install -y wget + run_cmd apt update + run_cmd apt install -y wget echo -e "\n${head_info}: Descargando Zettlr versión $ZETTLR_VERSION para $arch..." @@ -155,7 +173,7 @@ install_zettlr_debian() { fi echo -e "\n${head_info}: Instalando Zettlr..." - sudo apt install -y /tmp/zettlr.deb + run_cmd apt install -y /tmp/zettlr.deb rm -f /tmp/zettlr.deb # Verificar la instalación @@ -171,8 +189,8 @@ install_zettlr_debian() { # Función para desinstalar Zettlr en sistemas basados en Debian/Ubuntu uninstall_zettlr_debian() { echo -e "\n${head_info}: Desinstalando Zettlr..." - sudo apt remove --purge -y zettlr - sudo apt autoremove -y + run_cmd apt remove --purge -y zettlr + run_cmd apt autoremove -y # Eliminar archivos de configuración residuales echo -e "\n${head_info}: Limpiando archivos de configuración..." @@ -187,8 +205,8 @@ install_zettlr_redhat() { local arch=$(get_arch) echo -e "\n${head_info}: Instalando dependencias necesarias..." - sudo dnf check-update - sudo dnf install -y wget + run_cmd dnf check-update + run_cmd dnf install -y wget echo -e "\n${head_info}: Descargando Zettlr versión $ZETTLR_VERSION para $arch..." @@ -202,7 +220,7 @@ install_zettlr_redhat() { fi echo -e "\n${head_info}: Instalando Zettlr..." - sudo dnf install -y /tmp/zettlr.rpm + run_cmd dnf install -y /tmp/zettlr.rpm rm -f /tmp/zettlr.rpm # Verificar la instalación @@ -218,7 +236,7 @@ install_zettlr_redhat() { # Función para desinstalar Zettlr en sistemas basados en Red Hat uninstall_zettlr_redhat() { echo -e "\n${head_info}: Desinstalando Zettlr..." - sudo dnf remove -y zettlr + run_cmd dnf remove -y zettlr # Eliminar archivos de configuración residuales echo -e "\n${head_info}: Limpiando archivos de configuración..." @@ -231,10 +249,10 @@ uninstall_zettlr_redhat() { # Función para instalar Zettlr en Arch Linux install_zettlr_arch() { echo -e "\n${head_info}: Actualizando repositorios..." - sudo pacman -Sy + run_cmd pacman -Sy echo -e "\n${head_info}: Instalando dependencias necesarias..." - sudo pacman -S --needed --noconfirm base-devel git + run_cmd pacman -S --needed --noconfirm base-devel git # Verificar si yay está instalado if ! command -v yay &>/dev/null; then @@ -265,9 +283,9 @@ install_zettlr_arch() { uninstall_zettlr_arch() { echo -e "\n${head_info}: Desinstalando Zettlr..." if pacman -Qi zettlr-bin &>/dev/null; then - sudo pacman -R --noconfirm zettlr-bin + run_cmd pacman -R --noconfirm zettlr-bin elif pacman -Qi zettlr &>/dev/null; then - sudo pacman -R --noconfirm zettlr + run_cmd pacman -R --noconfirm zettlr fi # Eliminar archivos de configuración residuales @@ -475,6 +493,24 @@ uninstall_zettlr() { return $result } +# Si no se ejecuta como root, solicitar contraseña para escalamiento vía dialog +if [ "$EUID" -ne 0 ]; then + dialog_error_box "${head_superuser}" "${hx_011}" + dialog_input_pass "${npm_002}" "" "" + if [ $? -ne 0 ]; then + dialog_error_box "${head_error}" "${npm_003}" + finish + fi + SUDO_PASS="$value" + + # Verificar que la contraseña funcione + echo "$SUDO_PASS" | sudo -S true &> /dev/null + if [ $? -ne 0 ]; then + dialog_error_box "${head_error}" "${npm_003}" + finish + fi +fi + # Mensaje de bienvenida clear dialog_error_box "${zl_001}" "${zl_002}"