c875723bef
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.
87 lines
2.1 KiB
Bash
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
|