summaryrefslogtreecommitdiffstats
path: root/completions/useradd
diff options
context:
space:
mode:
Diffstat (limited to 'completions/useradd')
-rw-r--r--completions/useradd53
1 files changed, 32 insertions, 21 deletions
diff --git a/completions/useradd b/completions/useradd
index ceeca91..6c0bef1 100644
--- a/completions/useradd
+++ b/completions/useradd
@@ -1,46 +1,57 @@
# useradd(8) completion -*- shell-script -*-
-_useradd()
+_comp_cmd_useradd()
{
- local cur prev words cword split
- _init_completion -s || return
+ local cur prev words cword was_split comp_args
+ _comp_initialize -s -- "$@" || return
# TODO: if -o/--non-unique is given, could complete on existing uids
# with -u/--uid
+ local word chroot="" has_chroot=""
+ for word in "${words[@]}"; do
+ if [[ $has_chroot ]]; then
+ chroot=$word
+ break
+ fi
+ [[ $word != -@(R|-root) ]] || has_chroot=set
+ done
+
+ local noargopts='!(-*|*[cefKpubdkRgGZs]*)'
+ # shellcheck disable=SC2254
case $prev in
- --comment | --help | --expiredate | --inactive | --key | --password | --uid | \
- --selinux-user | -!(-*)[chefKpuZ])
+ --comment | --help | --expiredate | --inactive | --key | --password | \
+ --uid | -${noargopts}[chefKpu])
+ return
+ ;;
+ --base-dir | --home-dir | --skel | --root | -${noargopts}[bdkR])
+ _comp_compgen_filedir -d
return
;;
- --base-dir | --home-dir | --skel | --root | -!(-*)[bdkR])
- _filedir -d
+ --gid | -${noargopts}g)
+ _comp_compgen_gids
+ _comp_compgen -a -- -g
return
;;
- --gid | -!(-*)g)
- _gids
- COMPREPLY=($(compgen -W '${COMPREPLY[@]} $(compgen -g)' \
- -- "$cur"))
+ --groups | -${noargopts}G)
+ _comp_delimited , -g
return
;;
- --groups | -!(-*)G)
- local prefix=
- [[ $cur == *,* ]] && prefix="${cur%,*},"
- COMPREPLY=($(compgen -g -- "${cur##*,}"))
- ((${#COMPREPLY[@]} == 1)) && COMPREPLY=(${COMPREPLY/#/$prefix})
+ --selinux-user | -${noargopts}Z)
+ _comp_compgen_selinux_users
return
;;
- --shell | -!(-*)s)
- _shells
+ --shell | -${noargopts}s)
+ _comp_compgen_shells "${chroot-}"
return
;;
esac
- $split && return
+ [[ $was_split ]] && return
[[ $cur == -* ]] &&
- COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
+ _comp_compgen_help
} &&
- complete -F _useradd useradd
+ complete -F _comp_cmd_useradd useradd
# ex: filetype=sh