Ville Skyttä c875723bef Include trailing equals sign in options that take arguments that way.
This way it's clearer to users that an argument is expected.  It's
likely that this commit does not catch all such cases, but it should
do it for most of the affected commands I have installed.
2011-05-02 11:45:55 +03:00

87 lines
2.1 KiB
Bash

# bash completion for getent
have getent || return
_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 "$( getent $db | \
awk '{ print $1 }' )" -- "$cur" ) )
return 0
;;
aliases|shadow|gshadow)
COMPREPLY=( $( compgen -W "$( getent $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
# Local variables:
# mode: shell-script
# sh-basic-offset: 4
# sh-indent-comment: t
# indent-tabs-mode: nil
# End:
# ex: ts=4 sw=4 et filetype=sh