From ed034ffb5f04fb58d5f43fa10b6f10e2560928b0 Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff Date: Sat, 28 Mar 2020 18:13:07 +0200 Subject: Fix the -k option. * slackupgrade: Fix declaration of the -k option Change the value of keep_file to the absolute path name. --- slackupgrade | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/slackupgrade b/slackupgrade index 9be3e98..f00e20b 100644 --- a/slackupgrade +++ b/slackupgrade @@ -414,11 +414,25 @@ function download_all() { fi } +function abspath() { + local name=$1 + local val + eval val=\$$name + case $val in + /*) ;; + *) local dir=$(dirname $val) + dir=$(cd $dir 2>/dev/null && pwd) || abend "can't canonicalize $val" + val=$dir/$(basename $val) + eval $name=$val + ;; + esac +} + # ########## # Main # ########## -while getopts "ahIknp:qSs:vy" OPTION +while getopts "ahIk:np:qSs:vy" OPTION do case $OPTION in I) opmode=INCR;; @@ -426,7 +440,8 @@ do a) install_all=y;; h) usage exit 0;; - k) keep_file=$OPTARG;; + k) keep_file=$OPTARG + abspath keep_file;; n) dry_run=y;; p) install_packages="$install_packages $OPTARG";; q) verbosity=q;; @@ -451,6 +466,10 @@ if [ $(id -u) != "0" ]; then abend "must be root" fi +if [ -n "$keep_file" ] && [ ! -f "$keep_file" ]; then + abend "keep file \"$keep_file\" doesn't exist or is unreadable" +fi + # Sanity check if [ ! -s /etc/os-release ]; then abend "/etc/os-release doesn't exist" @@ -596,7 +615,7 @@ fi) | sort -u > candidates.$$ # Build a list of packages that should be removed after install comm -2 -3 $installed_list candidates.$$ > remove.list.$$ -if [ -s "$keep_file" ]; then +if [ -n "$keep_file" ] && [ -s "$keep_file" ]; then grep -v '^#' $keep_file | \ tr -s '\n' | sort -u | comm -2 -3 remove.list.$$ - > remove.list rm remove.list.$$ -- cgit v1.2.1