grml_chroot: fix broken mount argument handling
[grml-scripts.git] / usr_sbin / grml-chroot
index 3b27505..b13b57e 100755 (executable)
@@ -6,14 +6,14 @@
 # License:       This file is licensed under the GPL v2.
 ################################################################################
 
-PROG_NAME_=$(basename $0)
+PROG_NAME_=$(basename "$0")
 DEST_=""
 MOUNTED_=""     # all mounted destinations
 
 
 function die
 {
-    echo "Error: $@" >&2
+    echo "Error: $*" >&2
     exit 1
 }
 
@@ -43,19 +43,20 @@ function mountit
     local dest_="$2"
     local options_="$3"
 
-    local all_options_=""
+    local all_options_=()
 
     if [[ $options_ == "--bind" ]]; then
-        all_options_="--bind $type_"
+        all_options_+=(--bind "$type_")
     else
-        all_options_="-t $type_ none"
+        all_options_+=(-t "$type_" none)
     fi
-    mount $all_options_ "${DEST_}/$dest_" && storeMounts "$dest_"
+    mount "${all_options_[@]}" "${DEST_}/$dest_" && storeMounts "$dest_"
 }
 
 function umount_all
 {
-    local reverse=$(echo $MOUNTED_ | awk '{ for (i=NF; i>1; i--) printf("%s ",$i); print $1; }')
+    local reverse
+    reverse=$(echo "$MOUNTED_" | awk '{ for (i=NF; i>1; i--) printf("%s ",$i); print $1; }')
     for i in $reverse; do
         umount "${DEST_}/$i"
     done
@@ -72,14 +73,14 @@ while getopts "h" opt; do
         ?) printUsage; exit 64 ;;
     esac
 done
-shift $(($OPTIND - 1))
+shift $((OPTIND - 1))
 
 if (( $# < 1 )); then
     printUsage
     die "Wrong number of arguments."
 fi
 
-if ! which awk >/dev/null 2>&1 ; then
+if ! command -v awk >/dev/null 2>&1 ; then
   die "No awk binary found, required for execution."
 fi
 
@@ -98,6 +99,9 @@ else
     mountit "sysfs" "sys"
     mountit "/dev"   "dev"   "--bind"
     mountit "devpts" "dev/pts"
+    if [ -d /sys/firmware/efi/efivars ] ; then
+      mountit "efivarfs" "sys/firmware/efi/efivars"
+    fi
     if [ -d "$DEST_"/run/udev ] && [ -d /run/udev ] ; then
       mountit "/run/udev" "/run/udev" "--bind"
     fi
@@ -119,7 +123,7 @@ else
 fi
 umount_all
 
-if [ ! -z "$WROTE_DEBIAN_CHROOT" ]; then
+if [ -n "$WROTE_DEBIAN_CHROOT" ]; then
     rm "$DEST_"/etc/debian_chroot
 fi