#!/bin/bash
+# Copyright (C) 2006 Andre Noll
+# Licensed under the LGPL, version 3. See COPYING and COPYING.LESSER.
# Syntactically check the gsu_options array for errors and parse the config
# file.
gsu_check_options()
{
- local i conf="${gsu_config_file:=${HOME:-}/.$gsu_name.rc}" val
+ local i f conf="${gsu_config_file:=${HOME:-}/.$gsu_name.rc}" val orig_val
+ local name option_type default_value required description help_text
for ((i=0; i < ${#gsu_options[@]}; i++)); do
eval "${gsu_options[$i]}"
eval orig_${gsu_config_var_prefix}_$name='"'${val}'"'
done
- [[ -r "$conf" ]] && source "$conf"
+ for f in $conf; do
+ [[ -r "$f" ]] && source "$f"
+ done
for ((i=0; i < ${#gsu_options[@]}; i++)); do
- local name= option_type= default_value= required=
- local description= help_text=
- local val orig_val
+ name=
+ option_type=
+ default_value=
+ required=
+ description=
+ help_text=
eval "${gsu_options[$i]}"
# Check name. It must be non-empty and consist of [a-zA-Z_0-9]
- # only. Moreover it must not start with [a-zA-Z].
+ # only. Moreover it must start with [a-zA-Z].
ret=-$E_GSU_BAD_CONFIG_VAR
result="name: '$name'"
- # bash's =~ works only for 3.2 and newer, so use grep
- echo "$name" | grep '^[a-zA-Z][a-zA-Z_0123456789]*$' &> /dev/null;
- [[ $? -ne 0 ]] && return
+ [[ "$name" =~ ^[a-zA-Z][a-zA-Z_0123456789]*$ ]] || return
eval orig_val='"'\$orig_${gsu_config_var_prefix}_$name'"'
if [[ -z "$orig_val" ]]; then
;;
num)
gsu_is_a_number "$val"
- [[ $ret -lt 0 ]] && return
+ ((ret < 0)) && return
;;
*)
ret=-$E_GSU_BAD_OPTION_TYPE
gsu_check_options_or_die()
{
gsu_check_options
- if (($ret < 0)); then
+ if ((ret < 0)); then
gsu_err_msg
exit 1
fi
}
if [[ "$(type -t _gsu_setup)" != "function" ]]; then
- gsu_dir=${gsu_dir:=${HOME:-}/.gsu}
- . $gsu_dir/common || exit 1
+ gsu_dir=${gsu_dir:-${BASH_SOURCE[0]%/*}}
+ . "$gsu_dir/common" || exit 1
_gsu_setup
fi