[arch-projects] [INITSCRIPTS][PATCH] rc.d: list [started|stopped|auto|noauto|daemon]
Sebastien Luttringer
seblu at seblu.net
Mon Aug 22 14:21:07 EDT 2011
list command can take new arguments auto/noauto.
list command can take a list of daemon to list.
All kind of arguments can be mixed to obtain the proper output.
zsh and bash completion are updated
Signed-off-by: Sebastien Luttringer <seblu at seblu.net>
---
bash-completion | 2 +-
rc.d | 71 ++++++++++++++++++++++++++++++++++++++----------------
zsh-completion | 2 +-
3 files changed, 52 insertions(+), 23 deletions(-)
diff --git a/bash-completion b/bash-completion
index d78484e..718df6d 100644
--- a/bash-completion
+++ b/bash-completion
@@ -10,7 +10,7 @@ _rc_d()
elif [[ "$prev" == help ]]; then
COMPREPLY=()
elif [[ "$prev" == list ]]; then
- ((COMP_CWORD == 2)) && COMPREPLY=($(compgen -W "started stopped" -- "$cur")) || COMPREPLY=()
+ COMPREPLY=($(compgen -W "started stopped auto noauto $(cd /etc/rc.d && compgen -f -X 'functions*')" -- "$cur"))
elif [[ "$prev" == start ]]; then
COMPREPLY=($(comm -23 <(cd /etc/rc.d && compgen -f -X 'functions*' "$cur"|sort) <(cd /run/daemons/ && compgen -f "$cur"|sort)))
elif [[ "$prev" =~ stop|restart|reload ]]; then
diff --git a/rc.d b/rc.d
index 3d34edf..81a07eb 100755
--- a/rc.d
+++ b/rc.d
@@ -4,11 +4,12 @@ NEED_ROOT=0 # this script can be run without be root
. /etc/rc.conf
. /etc/rc.d/functions
+# print usage and exit
usage() {
local name=${0##*/}
cat >&2 << EOF
usage: $name <action> <daemon> [daemon] ...
- $name list [started|stopped]
+ $name list [started|stopped|auto|noauto|daemon]
$name help
<daemon> is the name of a script in /etc/rc.d
@@ -17,40 +18,68 @@ WARNING: initscripts are free to implement or not the above actions.
e.g: $name list
$name list started
+ $name list sshd gpm
$name help
$name start sshd gpm
EOF
exit 1
}
+# list action
+list() {
+ local mode s_status s_auto
+ local -a daemons
+ # parse arguments
+ for p; do
+ case "$p" in
+ started) mode=started;;
+ stopped) mode=stopped;;
+ auto) mode=auto;;
+ noauto) mode=noauto;;
+ *) daemons=(${daemons[@]} "$p");;
+ esac
+ done
+ # if no daemon are specified take all executable file in /etc/rc.d
+ if ! [[ $daemons ]]; then
+ cd /etc/rc.d
+ for d in *; do
+ [[ -x "$d" && ! -d "$d" ]] && daemons=(${daemons[@]} "$d")
+ done
+ fi
+ # building string to display
+ for d in "${daemons[@]}"; do
+ # check if d is a valid daemon name
+ have_daemon "$d" || continue
+ # print running / stopped satus
+ if ! ck_daemon "$d"; then
+ [[ $mode == stopped ]] && continue
+ s_status="${C_OTHER}[${C_DONE}STARTED${C_OTHER}]"
+ else
+ [[ $mode == started ]] && continue
+ s_status="${C_OTHER}[${C_FAIL}STOPPED${C_OTHER}]"
+ fi
+ # print auto / manual status
+ if ! ck_autostart "$d"; then
+ [[ $mode == noauto ]] && continue
+ s_auto="${C_OTHER}[${C_DONE}AUTO${C_OTHER}]"
+ else
+ [[ $mode == auto ]] && continue
+ s_auto="${C_OTHER}[${C_FAIL} ${C_OTHER}]"
+ fi
+ printf "$s_status$s_auto${C_CLEAR} $d\n"
+ done
+}
+
(( $# < 1 )) && usage
declare -i ret=0
case $1 in
help)
usage
- ;;
+ ;;
list)
shift
- cd /etc/rc.d/
- for d in *; do
- have_daemon "$d" || continue
- # print running / stopped satus
- if ! ck_daemon "$d"; then
- [[ "$1" == stopped ]] && continue
- printf "${C_OTHER}[${C_DONE}STARTED${C_OTHER}]"
- else
- [[ "$1" == started ]] && continue
- printf "${C_OTHER}[${C_FAIL}STOPPED${C_OTHER}]"
- fi
- # print auto / manual status
- if ! ck_autostart "$d"; then
- printf "${C_OTHER}[${C_DONE}AUTO${C_OTHER}]"
- else
- printf "${C_OTHER}[${C_FAIL} ${C_OTHER}]"
- fi
- printf " ${C_CLEAR}$d\n"
- done
+ list "$@"
;;
*)
# check min args count
diff --git a/zsh-completion b/zsh-completion
index e5c2850..b324e5c 100644
--- a/zsh-completion
+++ b/zsh-completion
@@ -19,7 +19,7 @@ _rc.d () {
_arguments "*: :"
;;
list)
- _arguments "2: :(started stopped)"
+ _arguments "*: :(started stopped auto noauto $(echo /etc/rc.d/*(N-*:t)))"
;;
start)
_arguments "*: :($(comm -23 <(echo /etc/rc.d/*(N-*:t)|tr ' ' '\n') <(echo /run/daemons/*(N:t)|tr ' ' '\n')))"
--
Sebastien "Seblu" Luttringer
More information about the arch-projects
mailing list