[arch-projects] [INITSCRIPTS][PATCH 4/4] rc.d: list [started|stopped|auto|noauto|daemon]

Sebastien Luttringer seblu at seblu.net
Tue Aug 23 05:05:56 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

/daemon allow to call named dameon like /auto call daemon auto

Signed-off-by: Sebastien Luttringer <seblu at seblu.net>
---
 bash-completion |    2 +-
 rc.d            |   77 ++++++++++++++++++++++++++++++++++++++----------------
 zsh-completion  |    2 +-
 3 files changed, 56 insertions(+), 25 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 9b0f092..9417e90 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
@@ -16,41 +17,71 @@ usage: $name <action> <daemon> [daemon] ...
 WARNING: initscripts are free to implement or not the above actions.
 
 e.g: $name list
-     $name list started
-     $name help
+     $name list sshd gpm
+     $name list started #all started daemons
+     $name list /started #daemon nammed started
      $name start sshd gpm
+     $name help
 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+=("${p:1}");;
+			*)			 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+=("$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..27af29c 100644
--- a/zsh-completion
+++ b/zsh-completion
@@ -19,7 +19,7 @@ _rc.d () {
 					_arguments "*: :"
 					;;
 				list)
-					_arguments "2: :(started stopped)"
+					_arguments "*: :(started stopped auto noauto /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