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