From a1d26c006fedc5b08bf2c22e8b190744d6ec61fd Mon Sep 17 00:00:00 2001 From: earthlng Date: Mon, 1 Mar 2021 16:35:44 +0000 Subject: [PATCH] v3.0 - improve readIniFile() - grep -c equals grep | wc -l - make output prettier - work with variable instead of temporary file --- updater.sh | 40 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/updater.sh b/updater.sh index 5f37ebc..fd2e667 100755 --- a/updater.sh +++ b/updater.sh @@ -2,7 +2,7 @@ ## arkenfox user.js updater for macOS and Linux -## version: 2.9 +## version: 3.0 ## Author: Pat Johnson (@overdodactyl) ## Additional contributors: @earthlng, @ema-pe, @claustromaniac @@ -122,36 +122,32 @@ open_file () { # expects one argument: file_path readIniFile () { # expects one argument: absolute path of profiles.ini declare -r inifile="$1" - declare -r tfile=$(mktemp) - if [ $(grep '^\[Profile' "$inifile" | wc -l) == "1" ]; then ### only 1 profile found - grep '^\[Profile' -A 4 "$inifile" | grep -v '^\[Profile' > $tfile + # tempIni will contain: [ProfileX], Name=, IsRelative= and Path= (and Default= if present) of the only (if) or the selected (else) profile + if [ $(grep -c '^\[Profile' "${inifile}") == "1" ]; then ### only 1 profile found + tempIni="$(grep '^\[Profile' -A 4 "${inifile}")" else - grep -E -v '^\[General\]|^StartWithLastProfile=|^IsRelative=' "$inifile" - echo '' - read -p 'Select the profile number ( 0 for Profile0, 1 for Profile1, etc ) : ' -r + echo -e "Profiles found:\n––––––––––––––––––––––––––––––" + ## cmd-substitution to strip trailing newlines and in quotes to keep internal ones: + echo "$(grep --color=never -E 'Default=[^1]|\[Profile[0-9]*\]|Name=|Path=|^$' "${inifile}")" + echo; read -p 'Select the profile number ( 0 for Profile0, 1 for Profile1, etc ) : ' -r echo -e "\n" if [[ $REPLY =~ ^(0|[1-9][0-9]*)$ ]]; then - grep '^\[Profile'${REPLY} -A 4 "$inifile" | grep -v '^\[Profile'${REPLY} > $tfile - if [[ "$?" != "0" ]]; then - echo "Profile${REPLY} does not exist!" && exit 1 - fi + tempIni="$(grep "^\[Profile${REPLY}" -A 4 "${inifile}")" || { + echo -e "${RED}Profile${REPLY} does not exist!${NC}" && exit 1 + } else - echo "Invalid selection!" && exit 1 + echo -e "${RED}Invalid selection!${NC}" && exit 1 fi fi - declare -r profpath=$(grep '^Path=' $tfile) - declare -r pathisrel=$(grep '^IsRelative=' $tfile) + # extracting 0 or 1 from the "IsRelative=" line + declare -r pathisrel=$(sed -n 's/^IsRelative=\([01]\)$/\1/p' <<< "${tempIni}") - rm "$tfile" - - # update global variable - if [[ ${pathisrel#*=} == "1" ]]; then - PROFILE_PATH="$(dirname "$inifile")/${profpath#*=}" - else - PROFILE_PATH="${profpath#*=}" - fi + # extracting only the path itself, excluding "Path=" + PROFILE_PATH=$(sed -n 's/^Path=\(.*\)$/\1/p' <<< "${tempIni}") + # update global variable if path is relative + [[ ${pathisrel} == "1" ]] && PROFILE_PATH="$(dirname "${inifile}")/${PROFILE_PATH}" } getProfilePath () {