From a384f71c2c4c2b534e7a93a400003059902d30d9 Mon Sep 17 00:00:00 2001 From: Muhammad Rivan Date: Thu, 10 Jun 2021 13:33:45 +0700 Subject: [PATCH] Differenciate between error and abort signal --- lib-core.sh | 44 +++++++++++++++++++++++++++++++++++++++----- lib-install.sh | 4 +--- 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/lib-core.sh b/lib-core.sh index e64a40f..c55b4e5 100755 --- a/lib-core.sh +++ b/lib-core.sh @@ -42,6 +42,8 @@ else SED_OPT="-i" fi +SUDO_BIN="$(which sudo)" + #------------Directories--------------# THEME_SRC_DIR="${REPO_DIR}/src" DASH_TO_DOCK_SRC_DIR="${REPO_DIR}/src/other/dash-to-dock" @@ -152,8 +154,6 @@ anim=( " ${c_blue}•${c_green}•${c_red}•${c_magenta}• " ) -export SUDO_PROMPT="${c_yellow} SUDO: Authentication is required\n${c_green} SUDO: Password (${MY_USERNAME}): " - ############################################################################### # CORE UTILITIES # ############################################################################### @@ -292,6 +292,12 @@ trap 'signal_abort' INT TERM TSTP # USER UTILITIES # ############################################################################### +ask() { + echo -e "${c_magenta}\r" + read -p " ${2}" ${1} 2>&1 + echo -e "${c_default}" +} + helpify_title() { printf "${c_cyan}%s${c_blue}%s ${c_green}%s\n\n" "Usage: " "$0" "[OPTIONS...]" printf "${c_cyan}%s\n" "OPTIONS:" @@ -586,13 +592,41 @@ remind_relative_path() { # MISC # ############################################################################### +sudo() { + local result="0" + + prompt -w "Executing '$(echo "${@}" | cut -c -35 )...' as root" + + if ! ${SUDO_BIN} -n true 2> /dev/null; then + echo -e "${c_magenta} Authentication is required:${c_default}" + fi + + # Don't combine '[[ ... ]]' and '! ... < /dev/stdin' cause it's gonna + # break the logic/workflow + if [[ -p /dev/stdin ]]; then + if ! ${SUDO_BIN} "${@}" < /dev/stdin; then + result="1"; WHITESUR_COMMAND="${*}" + fi + elif ! ${SUDO_BIN} "${@}"; then + result="1"; WHITESUR_COMMAND="${*}" + fi + + echo -e "${c_default}" + + return "${result}" +} + udo() { local result="0" + # Don't combine '[[ ... ]]' and '! ... < /dev/stdin' cause it's gonna + # break the logic/workflow if [[ -p /dev/stdin ]]; then - ! sudo -u "${MY_USERNAME}" "${@}" < /dev/stdin && result="1"; WHITESUR_COMMAND="${*}" - else - ! sudo -u "${MY_USERNAME}" "${@}" && result="1"; WHITESUR_COMMAND="${*}" + if ! ${SUDO_BIN} -u "${MY_USERNAME}" "${@}" < /dev/stdin; then + result="1"; WHITESUR_COMMAND="${*}" + fi + elif ! ${SUDO_BIN} -u "${MY_USERNAME}" "${@}"; then + result="1"; WHITESUR_COMMAND="${*}" fi return "${result}" diff --git a/lib-install.sh b/lib-install.sh index 83f685f..7f87c12 100755 --- a/lib-install.sh +++ b/lib-install.sh @@ -53,9 +53,7 @@ prepare_swupd() { prompt -w "CLEAR LINUX: You have 'dnf' installed in your system. It may break your system especially when you remove a package" while [[ "${remove}" != "y" && "${remove}" != "n" ]]; do - echo -e "\r${c_green}" - read -p " CLEAR LINUX: You wanna remove it? (y/n): " remove 2>&1 - echo -e "${c_default}" + ask remove "CLEAR LINUX: You wanna remove it? (y/n): " done fi