#compdef svccfg _svccfg_properties() { local -a props fmris local fmri="$argv[$#]" # If There's more than one possible FMRI, bail fmris=( ${(f)"$(svcs -H -o fmri $fmri)"} ) if [[ $#fmris -gt 1 ]]; then _message "'$fmri' is ambiguous" return 1 fi # Get all the property names for the FMRI props=( ${${${(f)"$(svccfg -s $fmri describe)"}:# *}%% *} ) _multi_parts "$@" - / props } _svccfg() { local context state line subcmds typeset -A opt_args # Subcommands that don't make sense on the commandline are missing subcmds=( apply export extract import inventory validate add delete list addpg addpropvalue delcust delpg delprop delpropvalue describe editprop listpg listprop listcust setenv setprop unsetenv setnotify listnotify delnotify listsnap revert selectsnap refresh ) if [[ $service == "svccfg" ]]; then _arguments -s \ '-?[help]' \ '-v[verbose]' \ '-s[FMRI on which to operate]:fmri:_svcs_fmri -c' \ - set1 \ '-f[read commands from file]:command file:_files' \ - set2 \ '*::command:->subcmd' && return 0 if (( CURRENT == 1 )); then _wanted commands expl 'svccfg subcommand' compadd -a subcmds return fi service="$words[1]" curcontext="${curcontext%:*}=$service:" fi case $service in (import) _arguments \ '-V[verify property updates]' \ ':file:_files' ;; (apply|inventory) _files ;; (validate) _alternative 'files:file:_files' 'fmris:fmri:_svcs_fmri -c' ;; (export) _svcs_fmri -c ;; (delete) _arguments \ '-f[force deletion if online or degraded]' \ '*:FMRI:_svcs_fmri -c' ;; (describe) local fmri=$opt_args[-s] _arguments -A "-*" \ '-v[give all information]' \ '-t[show only template data]' \ ":property group or property:_svccfg_properties $fmri" ;; (extract|add|delete|list|addpg|addpropvalue|delcust|delpg|delprop) ;; (delpropvalue|editprop|listpg|listprop|listcust|setenv|setprop|unsetenv) ;; (setnotify|listnotify|delnotify|listsnap|revert|selectsnap|refresh) ;; (*) _message "unknown svccfg subcommand: $service" ;; esac } _svccfg "$@" # vi:tw=0