3 # Syntactically check the gsu_options array for errors and parse the config
7 local i conf="${gsu_config_file:=$HOME/.$gsu_name.rc}" val
9 for ((i=0; i < ${#gsu_options[@]}; i++)); do
10 eval "${gsu_options[$i]}"
11 eval val='"'\$$name'"'
12 eval orig_${gsu_config_var_prefix}_$name='"'${val}'"'
15 [[ -r "$conf" ]] && source "$conf"
17 for ((i=0; i < ${#gsu_options[@]}; i++)); do
18 local name= option_type= default_value= required=
19 local description= help_text=
22 eval "${gsu_options[$i]}"
25 # Check name. It must be non-empty and consist of [a-zA-Z_0-9]
26 # only. Moreover it must not start with [a-zA-Z].
28 ret=-$E_GSU_BAD_CONFIG_VAR
29 result="name: '$name'"
30 # bash's =~ works only for 3.2 and newer, so use grep
31 echo "$name" | grep '^[a-zA-Z][a-zA-Z_0123456789]*$' &> /dev/null;
32 [[ $? -ne 0 ]] && return
34 eval orig_val='"'\$orig_${gsu_config_var_prefix}_$name'"'
35 if [[ -z "$orig_val" ]]; then
36 eval val='"'\$$name'"'
42 ret=-$E_GSU_NEED_VALUE
44 [[ -z "$val" ]] && return
50 result="required: $required, name: $name, val: $val"
54 eval ${gsu_config_var_prefix}_$name='"'\${val:=$default_value}'"'
55 # Check option type. ATM, only num and string are supported
56 # Other types may be added without breaking compatibility
57 case "$option_type" in
61 gsu_is_a_number "$val"
62 [[ $ret -lt 0 ]] && return
65 ret=-$E_GSU_BAD_OPTION_TYPE
66 result="$name/$option_type"
73 # Call gsu_check_options(), die on errors.
74 gsu_check_options_or_die()
83 if [[ "$(type -t _gsu_setup)" != "function" ]]; then
84 gsu_dir=${gsu_dir:=$HOME/.gsu}
85 . $gsu_dir/common || exit 1