#compdef zoneadm zonecfg zlogin _zones () { case "$services" in zoneadm) _zoneadm "$@";; zonecfg) _zonecfg "$@";; zlogin) _zlogin "$@";; *) _message "Unknow service $service";; esac } _zlogin () { _arguments \ '-l:username:_users' \ '-C:console login:' \ '*:zonename:'$zonelist _zlogin "$@" } zonelist () { local -a zones # Fetch zone lists from /etc/zones/index zones=(${${(a)"${(f)$(< /etc/zones/index)}"##\#*}//:*}) #" prevent vim become crazy # Remove global zone from list " zones[(r)global]='' return $zones } return 1 % zlogin Unknow service zlogin