# bash completion for getent -*- shell-script -*- _getent() { local cur prev words cword split _init_completion -s || return local i db for (( i=1; i < cword; i++ )); do case ${words[i]} in --version|--usage|--help|-!(-*)[V?]) return ;; --service|-!(-*)s) (( i++ )) ;; -*) ;; *) # First non-option value is the db db=${words[i]} break ;; esac done case $db in passwd) COMPREPLY=( $(compgen -u -- "$cur") ) return ;; group) COMPREPLY=( $(compgen -g -- "$cur") ) return ;; services) COMPREPLY=( $(compgen -s -- "$cur") ) return ;; hosts) COMPREPLY=( $(compgen -A hostname -- "$cur") ) return ;; protocols|networks|ahosts|ahostsv4|ahostsv6|rpc) COMPREPLY=( $(compgen -W "$($1 $db | \ awk '{ print $1 }')" -- "$cur") ) return ;; aliases|shadow|gshadow) COMPREPLY=( $(compgen -W "$($1 $db | cut -d: -f1)" -- "$cur") ) return ;; ethers|netgroup) return ;; esac case $prev in -s|--service) return ;; esac $split && return if [[ $cur == -* ]]; then COMPREPLY=( $(compgen -W '$(_parse_help "$1")' -- "$cur") ) [[ $COMPREPLY == *= ]] && compopt -o nospace elif [[ -z $db ]]; then COMPREPLY=( $(compgen -W 'passwd group hosts services protocols networks ahosts ahostsv4 ahostsv6 aliases ethers netgroup rpc shadow gshadow' -- "$cur") ) fi } && complete -F _getent getent # ex: filetype=sh