# 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 -V|--version|--usage|-'?'|--help) return ;; -s|--service) (( i++ )) ;; -*) ;; *) # First non-option value is the db db=${words[i]} break ;; esac done case $db in passwd) COMPREPLY=( $( compgen -u -- "$cur" ) ) return 0 ;; group) COMPREPLY=( $( compgen -g -- "$cur" ) ) return 0 ;; services) COMPREPLY=( $( compgen -s -- "$cur" ) ) return 0 ;; hosts) COMPREPLY=( $( compgen -A hostname -- "$cur" ) ) return 0 ;; protocols|networks|ahosts|ahostsv4|ahostsv6|rpc) COMPREPLY=( $( compgen -W "$( $1 $db | \ awk '{ print $1 }' )" -- "$cur" ) ) return 0 ;; aliases|shadow|gshadow) COMPREPLY=( $( compgen -W "$( $1 $db | cut -d: -f1 )" \ -- "$cur" ) ) return 0 ;; 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: ts=4 sw=4 et filetype=sh