1#compdef getent 2 3local curcontext="$curcontext" state line expl ret=1 4local services databases keys 5local -a args 6typeset -A opt_args 7 8if _pick_variant -r is_gnu gnu='(GNU|EGLIBC)' unix --version; then 9 args+=( 10 '(- 1 *)'{-\?,--help}'[display help information]' 11 '(- 1 *)--usage[display a short usage message]' 12 '(- 1 *)'{-V,--version}'[display version information]' 13 {-s,--service=}'[specify service configuration to use]:service:->services' 14 '(-i --no-idn)'{-i,--no-idn}'[disable IDN encoding]' 15 ) 16fi 17 18_arguments -C "$args[@]" \ 19 '1:database:->databases' \ 20 '*:key:->keys' && ret=0 21 22case $state in 23 services) 24 services=( /lib/libnss*(-.:fr:t:s/libnss_//) ) 25 _wanted services expl service compadd ${services%-*} && ret=0 26 ;; 27 databases) 28 if [[ $is_gnu = gnu ]]; then 29 databases=( "${(@)${(@f)$(_call_program databases $words[1] --help \ 30 2>/dev/null)}[(r)Supported*,-1]}" ) 31 databases=( "${=${(@)databases[2,${(@)databases[(i)]}-1]}}" ) 32 else 33 databases=( passwd group hosts ipnodes services protocols ethers networks netmasks ) 34 fi 35 _wanted databases expl database compadd -a databases && ret=0 36 ;; 37 keys) 38 keys=( ${(f)"$(_call_program keys $words[1] ${(kv)opt_args[(i)-s|--service]} $line[1] 2>/dev/null)"} ) 39 case $line[1] in 40 *hosts) _wanted keys expl key compadd ${=keys#* } && ret=0 ;; 41 networks|rpc|protocols|services) 42 _wanted keys expl key compadd ${=keys%% *} && ret=0 43 ;; 44 aliases|passwd|shadow|group) 45 _wanted keys expl key compadd ${keys%%:*} && ret=0 46 ;; 47 *) _message -e keys key;; 48 esac 49 ;; 50esac 51 52return ret 53