diff options
Diffstat (limited to 'completions/service')
-rw-r--r-- | completions/service | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/completions/service b/completions/service index bccb17cd..7bcde8ca 100644 --- a/completions/service +++ b/completions/service @@ -4,13 +4,12 @@ # _services() { - local sysvdir famdir - [ -d /etc/rc.d/init.d ] && sysvdir=/etc/rc.d/init.d || sysvdir=/etc/init.d - famdir=/etc/xinetd.d + local sysvdirs famdir=/etc/xinetd.d + _sysvdirs local restore_nullglob=$(shopt -p nullglob); shopt -s nullglob - COMPREPLY=( $( printf '%s\n' $sysvdir/!($_backup_glob|functions) ) ) + COMPREPLY=( $( printf '%s\n' ${sysvdirs[0]}/!($_backup_glob|functions) ) ) if [ -d $famdir ]; then COMPREPLY+=( $( printf '%s\n' $famdir/!($_backup_glob) ) ) @@ -21,7 +20,7 @@ _services() COMPREPLY+=( $( systemctl list-units --full --all 2>/dev/null | \ awk '$1 ~ /\.service$/ { sub("\\.service$", "", $1); print $1 }' ) ) - COMPREPLY=( $( compgen -W '${COMPREPLY[@]#@($sysvdir|$famdir)/}' -- "$cur" ) ) + COMPREPLY=( $( compgen -W '${COMPREPLY[@]#@(${sysvdirs[0]}|$famdir)/}' -- "$cur" ) ) } # This completes on a list of all available service scripts for the @@ -39,20 +38,23 @@ _service() 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 + local sysvdirs + _sysvdirs COMPREPLY=( $( compgen -W '`sed -e "y/|/ /" \ -ne "s/^.*\(U\|msg_u\)sage.*{\(.*\)}.*$/\2/p" \ - $sysvdir/${prev##*/} 2>/dev/null` start stop' -- "$cur" ) ) + ${sysvdirs[0]}/${prev##*/} 2>/dev/null` start stop' -- "$cur" ) ) fi return 0 } && complete -F _service service -for svc in /etc/init.d/!($_backup_glob) /etc/rc.d/init.d/!($_backup_glob); do - [ -x "$svc" ] && complete -F _service $svc + +_sysvdirs +for svcdir in ${sysvdirs[@]}; do + for svc in $svcdir/!($_backup_glob); do + [ -x "$svc" ] && complete -F _service $svc + done done -unset svc +unset svc svcdir sysvdirs # ex: ts=4 sw=4 et filetype=sh |