this is another version of the bash completion script.
removed an unnecessary echo and allows auto completion for not
well-adopted usage like rc.d status foo.
here's the patch:
commit 47c48b15047ae46dd2e3d56559dad17d57f78c91
Author: Auguste Pop
Date: Fri May 20 22:13:31 2011 +0800
basic rc.d bash completion
diff --git a/Makefile b/Makefile
index ad8a058..a7f3ad2 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
VER := $(shell git describe)
-DIRS := /etc/rc.d /etc/conf.d /etc/rc.d/functions.d /etc/cron.hourly
/sbin /etc/modprobe.d
+DIRS := /etc/rc.d /etc/conf.d /etc/rc.d/functions.d /etc/cron.hourly
/sbin /etc/modprobe.d /etc/bash_completion.d
minilogd: minilogd.o
@@ -13,6 +13,7 @@ install: minilogd installdirs
install -m644 -t $(DESTDIR)/etc/rc.d functions
install -m755 -t $(DESTDIR)/etc/rc.d hwclock network netfs
install -m755 -t $(DESTDIR)/sbin minilogd rc.d modprobe-blacklist
+ install -m644 bash_completion $(DESTDIR)/etc/bash_completion.d/rc.d
ln -s /run/initscripts/modprobe-blacklist.conf
$(DESTDIR)/etc/modprobe.d/arch-blacklist.conf
clean:
diff --git a/bash_completion b/bash_completion
new file mode 100644
index 0000000..9d766fe
--- /dev/null
+++ b/bash_completion
@@ -0,0 +1,56 @@
+#!/bin/bash
+
+_rc_d_getdaemons ()
+{
+ local -a files=("$1"/*)
+ echo "${files[@]##*/}"
+}
+
+_rc_d_arraydiff ()
+{
+ local -A arr
+
+ for elem in "${!1}"; do
+ arr[$elem]=1
+ done
+ for elem in "${!2}"; do
+ unset arr[$elem]
+ done
+ echo "${!arr[@]}"
+}
+
+_rc_d ()
+{
+ local command commands available started
+ local cur words cword
+
+ commands="list help start stop restart"
+ available=($(_rc_d_getdaemons /etc/rc.d))
+ started=($(_rc_d_getdaemons /run/daemons))
+
+ _get_comp_words_by_ref -n =: cur words cword
+ [[ $cword -gt 1 ]] && command=${words[1]}
+
+ if [[ -z "$command" ]]; then
+ COMPREPLY=($(compgen -W "$commands" -- $cur))
+ else
+ case "$command" in
+ start)
+ COMPREPLY=($(compgen -W "$(_rc_d_arraydiff \
+ available[@] started[@])" -X "functions*" -- $cur))
+ ;;
+ stop|restart)
+ COMPREPLY=($(compgen -W "${started[*]}" -- $cur))
+ ;;
+ list|help)
+ COMPREPLY=()
+ ;;
+ *)
+ COMPREPLY=($(compgen -W "${available[*]}" \
+ -X "functions*" --$cur))
+ ;;
+ esac
+ fi
+}
+
+complete -F _rc_d rc.d