# bash completion for dsv # shellcheck shell=bash _dsv() { local cur=${COMP_WORDS[COMP_CWORD]} cmd=${COMP_WORDS[1]:-} if ((COMP_CWORD == 1)); then mapfile -t COMPREPLY < <(compgen -W "list status enable disable start stop restart logs help" -- "$cur") return fi case $cmd in enable) # services that are not enabled yet local all=() s for s in /etc/sv/*/; do s=${s%/} s=${s##*/} [[ -e /etc/runit/runsvdir/default/$s ]] || all+=("$s") done mapfile -t COMPREPLY < <(compgen -W "${all[*]}" -- "$cur") ;; disable | start | stop | restart) mapfile -t COMPREPLY < <(compgen -W "$(ls /etc/runit/runsvdir/default 2>/dev/null)" -- "$cur") ;; status | logs | log) if [[ $cmd == logs* ]] && ((COMP_CWORD == 3)); then mapfile -t COMPREPLY < <(compgen -W "-f" -- "$cur") else mapfile -t COMPREPLY < <(compgen -W "$(ls /etc/sv 2>/dev/null)" -- "$cur") fi ;; esac } complete -F _dsv dsv