mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-07-19 19:31:01 +02:00
53 lines
1.4 KiB
Text
53 lines
1.4 KiB
Text
#compdef chroot gchroot
|
|
|
|
local variant ret=1
|
|
local -a context line state state_descr args
|
|
local -A opt_args
|
|
|
|
_pick_variant -r variant gnu='Free Soft' unix --version
|
|
|
|
variant+=-$OSTYPE
|
|
|
|
case $variant in
|
|
gnu-*)
|
|
args=(
|
|
'(: -)--help[display help information]'
|
|
'(: -)--version[display version information]'
|
|
'--groups=[specify supplemental group memberships]: :_sequence -s , _groups'
|
|
'--userspec=[specify user and group to run process as]: :->userspecs'
|
|
'--skip-chdir[do not change working directory to /]'
|
|
)
|
|
;;
|
|
*-openbsd*)
|
|
args=(
|
|
'-u+[specify user to run process as]: :_users'
|
|
'-g+[specify group to run process as, and supplemental group memberships]: :_sequence -s , _groups'
|
|
)
|
|
;;
|
|
*-(darwin|dragonfly|freebsd|netbsd)*)
|
|
args=(
|
|
'-u+[specify user to run process as]: :_users'
|
|
'-g+[specify group to run process as]: :_groups'
|
|
'-G+[specify supplemental group memberships]: :_sequence -s , _groups'
|
|
)
|
|
;;
|
|
esac
|
|
|
|
args+=( '1:new root directory:_directories' '*::: : _normal -p $service' )
|
|
|
|
_arguments -s -S : $args && ret=0
|
|
|
|
# @todo user:group specs are probably used often enough to justify making a type
|
|
# function for this (see also `chown`, `cpio`, `rsync`, ...)
|
|
[[ $state == userspecs ]] &&
|
|
if compset -P '*:*:'; then
|
|
ret=1
|
|
elif compset -P '*:'; then
|
|
_groups && ret=0
|
|
elif compset -S ':*'; then
|
|
_users && ret=0
|
|
else
|
|
_users -qS : && ret=0
|
|
fi
|
|
|
|
return ret
|