Regarding Jiri's suggestion: Here is a diff that makes
`rcctl ls all' only list executable files with valid service
names.

This diff also fixes two problems with my original submission:
1. The use of `[' instead of `[[' causes filename expansion to
   take place on the right-hand side of the comparison; you get
   different results depending on which directory you're sitting
   in when you test. I have switched to `[[' to fix that problem.
2. There was a stray closing brace that somehow did not cause
   problems in testing.


Index: usr.sbin/rcctl/rcctl.sh
===================================================================
RCS file: /open/anoncvs/cvs/src/usr.sbin/rcctl/rcctl.sh,v
retrieving revision 1.104
diff -u -p -r1.104 rcctl.sh
--- usr.sbin/rcctl/rcctl.sh     30 Jul 2016 06:25:21 -0000      1.104
+++ usr.sbin/rcctl/rcctl.sh     6 Sep 2016 20:03:33 -0000
@@ -53,8 +53,8 @@ ls_rcscripts()
 
        cd /etc/rc.d && set -- *
        for _s; do
-               [[ ${_s} = *.* ]] && continue
-               [ ! -d "${_s}" ] && echo "${_s}"
+               [[ "${_s}" != +([_0-9A-Za-z]) ]] && continue
+               [ -x "${_s}" ] && echo "${_s}"
        done
 }
 
@@ -182,7 +182,7 @@ svc_is_meta()
 svc_is_special()
 {
        local _svc=$1
-       [ -n "${_svc}" ] || return
+       [[ "${_svc}" = +([_0-9A-Za-z]) ]] || return
 
        local _cached _ret
 

Reply via email to