dracut/mkinitrd_allow_multiple_args
Raymond Wooninck 3210e44b88 Accepting request 201877 from home:trenn:dracut_test
- Add ACPI table override ability
- Adjust mkinitrd-dracut.sh to SUSE mkinitrd:
  <none> : Before gives a "usage" error -> now scans /boot for kernels
           and builds corresponding inirtrds for them
  -i -k  : Pass a list of kernels and initrd targets
           (not sure it was worth the hassle to be able to pass)
  -b     : Boot directory to search for kernel images
  -d     : Change root file system. Not tested whether dracut's behavior
           matches exactly what our mkinitrd does.
  -s     : Dummy (should even be obsolete in latest mkinitrd)
- Write caller and used parameters to syslog if mkinitrd is called.
  So that those can easily be fixed and checked for correctness.
  This should get reverted again before a bigger release.

OBS-URL: https://build.opensuse.org/request/show/201877
OBS-URL: https://build.opensuse.org/package/show/Base:System/dracut?expand=0&rev=56
2013-10-02 12:32:19 +00:00

99 lines
3.5 KiB
Plaintext

mkinitrd-dracut.sh: Enhance param parsing: Allow multiple arguments per param
Currently --with parameter had to be passed as: --with="mod1 mod2".
Now one can pass: --with "mod1 mod2" or even --with mod1 mod2.
Signed-off-by: Thomas Renninger <trenn@suse.de>
diff --git a/mkinitrd-dracut.sh b/mkinitrd-dracut.sh
index ace7725..d8e92f3 100755
--- a/mkinitrd-dracut.sh
+++ b/mkinitrd-dracut.sh
@@ -26,36 +26,43 @@ read_arg() {
# $1 = arg name
# $2 = arg value
# $3 = arg parameter
- local rematch='^[^=]*=(.*)$'
+ param="$1"
+ local rematch='^[^=]*=(.*)$' result
if [[ $2 =~ $rematch ]]; then
- read "$1" <<< "${BASH_REMATCH[1]}"
- elif [[ $3 != -* ]]; then
- # Only read next arg if it not an arg itself.
- read "$1" <<< "$3"
- # There is no way to shift our callers args, so
- # return 1 to indicate they should do it instead.
- return 1
+ read "$param" <<< "${BASH_REMATCH[1]}"
+ else
+ for ((i=3; $i <= $#; i++)); do
+ # Only read next arg if it not an arg itself.
+ if [[ ${@:$i:1} = -* ]];then
+ break
+ fi
+ result="$result ${@:$i:1}"
+ # There is no way to shift our callers args, so
+ # return "no of args" to indicate they should do it instead.
+ done
+ read "$1" <<< "$result"
+ return $(($i - 3))
fi
}
while (($# > 0)); do
case ${1%%=*} in
- --with-usb) read_arg usbmodule "$@" || shift
+ --with-usb) read_arg usbmodule "$@" || shift $?
basicmodules="$basicmodules ${usbmodule:-usb-storage}"
unset usbmodule;;
- --with-avail) read_arg modname "$@" || shift
+ --with-avail) read_arg modname "$@" || shift $?
basicmodules="$basicmodules $modname";;
- --with) read_arg modname "$@" || shift
+ --with) read_arg modname "$@" || shift $?
basicmodules="$basicmodules $modname";;
--version)
echo "mkinitrd: dracut compatibility wrapper"
exit 0;;
-v|--verbose) dracut_args="${dracut_args} -v";;
-f|--force) dracut_args="${dracut_args} -f";;
- --preload) read_arg modname "$@" || shift
+ --preload) read_arg modname "$@" || shift $?
basicmodules="$basicmodules $modname";;
--image-version) img_vers=yes;;
- --rootfs) read_arg rootfs "$@" || shift
+ --rootfs) read_arg rootfs "$@" || shift $?
dracut_args="${dracut_args} --filesystems $rootfs";;
--nocompress) dracut_args="$dracut_args --no-compress";;
--help) usage -n;;
@@ -82,24 +89,24 @@ while (($# > 0)); do
--looppath*) ;;
--dsdt*) ;;
--bootchart) ;;
- -b) read_arg boot_dir "$@" || shift
+ -b) read_arg boot_dir "$@" || shift $?
if [ ! -d $boot_dir ];then
error "Boot directory $boot_dir does not exist"
exit 1
fi
;;
-k) # Would be nice to get a list of images here
- read_arg kernel_images "$@" || shift
+ read_arg kernel_images "$@" || shift $?
for kernel_image in $kernel_images;do
kernels="$kernels ${kernel_image#*-}"
done
;;
- -i) read_arg initrd_images "$@" || shift
+ -i) read_arg initrd_images "$@" || shift $?
for initrd_image in $initrd_images;do
- targets="$targets $boot_dir/$initrd_images"
+ targets="$targets $boot_dir/$initrd_image"
done
;;
- *) if [[ ! $targets ]]; then
+ *) if [[ ! $targets ]]; then
targets=$1
elif [[ ! $kernels ]]; then
kernels=$1