The regular expression for fining the subcommands was duplicated
four times in gsu. Needless to say that this resulted in more than
one variant of the expression...
Avoid this duplication by introducing the global gsu_command_regex
variable. While at it, use a more clever sed command in
_gsu_available_commands() which allows to kill a grep command.
+# Each line matching this is recognized as a subcommand. The name
+# of the subcommand is the first subexpression.
+export gsu_command_regex='^com_\([a-zA-Z_0-9]\+\)()'
+
_gsu_available_commands()
{
_gsu_available_commands()
{
- result="$( (printf "help\nman\nprefs\n"; grep "^com_[a-z_]\+()" $0) \
- | sed -e 's/^com_//' -e 's/()//' \
- | sort \
- | tr '\n' ' ')"
- ret=$GSU_SUCCESS
+ result="$({
+ printf "help\nman\nprefs\n"
+ sed -ne "s/$gsu_command_regex/\1/g;T;p" $0
+ } | sort | tr '\n' ' ')"
}
export -f _gsu_available_commands
}
export -f _gsu_available_commands
printf "com_help()\n$gsu_help_txt" | head -n 4; echo "--"
printf "com_man()\n$gsu_man_txt" | head -n 4; echo "--"
printf "com_prefs()\n$gsu_prefs_txt" | head -n 4; echo "--"
printf "com_help()\n$gsu_help_txt" | head -n 4; echo "--"
printf "com_man()\n$gsu_man_txt" | head -n 4; echo "--"
printf "com_prefs()\n$gsu_prefs_txt" | head -n 4; echo "--"
- grep -A 2 "^com_\([a-zA-Z_0-9]\+\)()" $0
+ grep -A 2 "$gsu_command_regex" $0
- | sed -e '/^com_\([a-zA-Z_0-9]\+\)()/bs' \
+ | sed -e "/$gsu_command_regex/bs" \
-e 'H;$!d;x;s/\n//g;b' \
-e :s \
-e 'x;s/\n//g;${p;x;}' \
-e 'H;$!d;x;s/\n//g;b' \
-e :s \
-e 'x;s/\n//g;${p;x;}' \
- | sed -e 's/^com_\([a-zA-Z_0-9]\+\)()#*/\1\t/' \
+ | sed -e "s/${gsu_command_regex}#*/\1\t/" \
| sort \
| while read a b; do
printf "$a\t"
| sort \
| while read a b; do
printf "$a\t"