1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
#compdef vserver
_vserver () {
# local variables
local curcontext="$curcontext" state line expl ret=1
local cmd=$words[3]
# dispatch
case "$cmd" in
apt-cache|apt-config|apt-get)
compset -n 3
_dispatch $cmd:t $cmd $cmd:t -default- && ret=0
;;
exec)
_arguments -C \
'1: :->vsnames' \
'2: :->cmds' \
'3:command name: _command_names -e' \
'*::arguments: _normal' && ret=0
;;
stop|restart|condrestart|enter|running|status)
_arguments -C \
'1: :->vsnames' \
'2: :->cmds' \
'*::arguments: _message "no more arguments"' && ret=0
;;
*)
_arguments -C \
'(-)--help[print help information]' \
'(- *)--version[print client version information]' \
'1: :->vsnames' \
'2: :->cmds' \
'*:: :->args' && ret=0
;;
esac
# cache initialization
if [[ -n "$state" ]]; then
if (( ! $+_cache_vserver_cfgdir )); then
typeset -g _cache_vserver_cfgdir_initialized
_vserver_cache_cfgdir
fi
if (( ! $+_cache_vserver_vsnames )); then
typeset -g _cache_vserver_vsnames_initialized
_vserver_cache_vsnames
fi
if (( ! $+_cache_vserver_cmds )); then
typeset -g _cache_vserver_cmds_initialized
_vserver_cache_cmds
fi
fi
case "$state" in
vsnames)
_wanted commands expl 'vserver name' _vserver_vsnames && ret=0
;;
cmds)
_wanted commands expl 'vserver command' _vserver_commands && ret=0
;;
args)
local args
if $+args; then
_arguments "$args[@]" && ret=0
else
ret=0
fi
;;
esac
return ret
}
(( $+functions[_vserver_commands] )) ||
_vserver_commands() {
compadd "$@" -k _cache_vserver_cmds || compadd "$@" ${(s.:.)_cache_vserver_cmds}
}
(( $+functions[_svk_list_patches] )) ||
_vserver_vsnames() {
local expl
_wanted vserver expl 'vserver name' compadd -S '' $_cache_vserver_vsnames[@]
}
(( $+functions[_vserver_cache_cfgdir] )) ||
_vserver_cache_cfgdir() {
if [[ "$_cache_vserver_cfgdir_initialized" != true ]]; then
typeset -ga _cache_vserver_cfgdir
_cache_vserver_cfgdir=`vserver-info info SYSINFO | grep '^ *cfg-Directory' | awk '{print $2}'`
_cache_vserver_cfgdir_initialized=true
fi
}
(( $+functions[_vserver_cache_vsnames] )) ||
_vserver_cache_vsnames() {
if [[ "$_cache_vserver_vsnames_initialized" != true ]]; then
typeset -ga _cache_vserver_vsnames
_cache_vserver_vsnames=( $(ls -d $_cache_vserver_cfgdir/*/ | sed -e s,$_cache_vserver_cfgdir,, | tr -d '/') )
_cache_vserver_vsnames_initialized=true
fi
}
(( $+functions[_vserver_cache_cmds] )) ||
_vserver_cache_cmds() {
if [[ "$_cache_vserver_cmds_initialized" != true ]]; then
typeset -ga _cache_vserver_cmds
_cache_vserver_cmds=(
start
stop
restart
condrestart
suexec
exec
enter
chkconfig
running
status
build
unify
pkg
apt-get
apt-config
apt-cache
rpm
pkgmgmt
)
_cache_vserver_cmds_initialized=true
fi
}
_vserver "$@"
|