diff options
Diffstat (limited to 'completions/service')
-rw-r--r-- | completions/service | 33 |
1 files changed, 10 insertions, 23 deletions
diff --git a/completions/service b/completions/service index 1a36f59b..f008770e 100644 --- a/completions/service +++ b/completions/service @@ -1,47 +1,34 @@ -# service(8) and /etc/init.d/* completion +# service(8) and /etc/init.d/* completion -*- shell-script -*- # This completes on a list of all available service scripts for the # 'service' command and/or the SysV init.d directory, followed by # that script's available commands -# -{ have service || [ -d /etc/init.d/ ]; } && + _service() { - local cur prev sysvdir - - COMPREPLY=() - _get_comp_words_by_ref cur prev - - # don't complete for things like killall, ssh and mysql if it's - # the standalone command, rather than the init script - [[ ${COMP_WORDS[0]} != @(*init.d/!(functions|~)|service) ]] && return 0 + local cur prev words cword + _init_completion || return # don't complete past 2nd token - [ $COMP_CWORD -gt 2 ] && return 0 + [ $cword -gt 2 ] && return 0 - if [[ $COMP_CWORD -eq 1 && $prev == "service" ]]; then + if [[ $cword -eq 1 && $prev == ?(*/)service ]]; then _services else + local sysvdir [ -d /etc/rc.d/init.d ] && \ sysvdir=/etc/rc.d/init.d || sysvdir=/etc/init.d COMPREPLY=( $( compgen -W '`sed -e "y/|/ /" \ -ne "s/^.*\(U\|msg_u\)sage.*{\(.*\)}.*$/\2/p" \ - $sysvdir/${prev##*/} 2>/dev/null`' -- "$cur" ) ) + $sysvdir/${prev##*/} 2>/dev/null` start stop' -- "$cur" ) ) fi return 0 } && complete -F _service service -for svc in /etc/init.d/*; do - [ ! -x "$svc" ] || complete -p "${svc##*/}" &>/dev/null || \ - complete -F _service -o default "${svc##*/}" +for svc in /etc/init.d/!($_backup_glob) /etc/rc.d/init.d/!($_backup_glob); do + [ -x "$svc" ] && complete -F _service $svc done unset svc -# Local variables: -# mode: shell-script -# sh-basic-offset: 4 -# sh-indent-comment: t -# indent-tabs-mode: nil -# End: # ex: ts=4 sw=4 et filetype=sh |