diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | Completion/BSD/Command/.distfiles | 13 | ||||
-rw-r--r-- | Completion/BSD/Command/_csup | 20 | ||||
-rw-r--r-- | Completion/BSD/Command/_fetch | 30 | ||||
-rw-r--r-- | Completion/BSD/Command/_freebsd-update | 20 | ||||
-rw-r--r-- | Completion/BSD/Command/_portaudit | 14 | ||||
-rw-r--r-- | Completion/BSD/Command/_portlint | 4 | ||||
-rw-r--r-- | Completion/BSD/Command/_portsnap | 12 | ||||
-rw-r--r-- | Completion/BSD/Command/_powerd | 13 | ||||
-rw-r--r-- | Completion/Solaris/Command/.distfiles | 1 | ||||
-rw-r--r-- | Completion/Solaris/Type/.distfiles | 1 | ||||
-rw-r--r-- | Completion/Unix/Command/_zfs | 238 | ||||
-rw-r--r-- | Completion/Unix/Command/_zpool | 201 |
13 files changed, 556 insertions, 20 deletions
diff --git a/ChangeLog b/ChangeLog index e378803de..0a4d06f96 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2008-08-12 Peter Stephenson <pws@csr.com> + + * unposted: Completion/Solaris/Command/.distfiles, + Completion/Solaris/Type/.distfiles: missed .distfiles entry. + + * 25435: Baptiste Daroussin <baptiste.daroussin@gmail.com>: + Completion/BSD/{_fetch,_freebsd-update,_portaudit,_portsnap, + _csup,_portlint,_powerd}: new and improved FreeBSD completions. + 2008-08-11 Peter Stephenson <p.w.stephenson@ntlworld.com> * unposted: Test/V06parameter.ztst: fix load directory for diff --git a/Completion/BSD/Command/.distfiles b/Completion/BSD/Command/.distfiles index 188292f3e..0fc183522 100644 --- a/Completion/BSD/Command/.distfiles +++ b/Completion/BSD/Command/.distfiles @@ -1,5 +1,14 @@ DISTFILES_SRC=' .distfiles -_bsd_pkg _cvsup _kld _chflags -_csup _portlint _portsnap +_bsd_pkg +_chflags +_csup +_cvsup +_fetch +_freebsd-update +_kld +_portaudit +_portlint +_portsnap +_powerd ' diff --git a/Completion/BSD/Command/_csup b/Completion/BSD/Command/_csup index 1a19bd1e5..ad36000c2 100644 --- a/Completion/BSD/Command/_csup +++ b/Completion/BSD/Command/_csup @@ -4,17 +4,17 @@ _arguments -s \ '-1[disable automatic retries]' \ '-4[Force usage of IPv4 addresses]' \ '-6[Force usage of IPv6 addresses]' \ - '-A:local address:_hosts' \ - '-b:base directory:_files -/' \ - '-c:collections directory:_files -/' \ - '-d:maximum number of deleted files:' \ - '-h:server host:_hosts' \ - '-i:file pattern:' \ + '-A[Local address to bind to when connecting to the server]:local address:_hosts' \ + '-b[Base directory]:base directory:_files -/' \ + '-c[Subdirectory of base for information about collections]:collections directory:_files -/' \ + '-d[maximum number of deleted files]:maximum number of deleted files:' \ + '-h[Server host]:server host:_hosts' \ + '-i[Include only files and directories matching]:file pattern:' \ '-k[keep temporary copies of failed updates]' \ - '-l:lock file:_files' \ - '-L:verbosity level:(0 1 2)' \ - '-p:port:_ports' \ - '-r:maximum number of retries:' \ + '-l[Lock file]:lock file:_files' \ + '-L[Verbosity level]:verbosity level:(0 1 2)' \ + '-p[Server port]:port:_ports' \ + '-r[maximum number of retries]:maximum number of retries:' \ '-s[suppress status checks]' \ '-v[print version information]' \ '(-Z)-z[enable compression]' \ diff --git a/Completion/BSD/Command/_fetch b/Completion/BSD/Command/_fetch new file mode 100644 index 000000000..7ca59b2e0 --- /dev/null +++ b/Completion/BSD/Command/_fetch @@ -0,0 +1,30 @@ +#compdef fetch +# Deprecated arguments are removed from the completion + +_arguments -s \ + '-1[Stop and return exit code 0 at the first successfully retrieved file]' \ + '-4[Forces fetch to use IPv4 addresses only]' \ + '-6[Forces fetch to use IPv6 addresses only]' \ + '-A[Do not automatically follow "temporary" (302) redirects]' \ + '-a[Automatically retry the transfer upon soft failures]' \ + '-B[Specify the read buffer size in bytes]:bytes:' \ + '-d[Use a direct connection even if a proxy is configured]' \ + '-F[In combination with the -r flag, forces a restart]' \ + '-l[If the target is a file-scheme URL, make a symbolic link to the target]' \ + '-M' \ + '-m[Mirror mode]' \ + '-N[Use file instead of ~/.netrc to look up login names and pass- words for FTP sites]' \ + '-n[Do not preserve the modification time]' \ + '-o[Set the output file name]:file:_files' \ + '-P' \ + '-p[Use passive FTP]' \ + '-q[Quiet mode]' \ + '-R[Do not delete the output file in any circumstances]' \ + '-r[Restart a previously interrupted transfer]' \ + '-S[Require the file size reported by the server to match the specified value]' \ + '-s[Print the size in bytes, without fetching it]' \ + '-T[Set timeout value]:seconds:' \ + '-U[When using passive FTP, allocate the port for the data connection from the low port range]' \ + '-v[Increase verbosity level]' \ + '-w[wait successive retries]:seconds:' \ + '*:URL to fetch:_urls' diff --git a/Completion/BSD/Command/_freebsd-update b/Completion/BSD/Command/_freebsd-update new file mode 100644 index 000000000..a47ac21d6 --- /dev/null +++ b/Completion/BSD/Command/_freebsd-update @@ -0,0 +1,20 @@ +#compdef freebsd-update + +local flags +flags=( + '(cron)fetch[Fetch a compressed snapshot or update existing one]' + '(fetch)cron[Sleep rand(3600) seconds, and then fetch updates]' + '(install rollback)upgrade[Fetch files necessary for upgrading to a new release]' + '(upgrade rollback)install[Install the most recently fetched updates or upgrade]' + '(upgrade install)rollback[Uninstall the most recently installed updates]' +) + +_arguments -s \ + '-b[Operate on a system mounted at basedir]:basedir:_files -/' \ + '-d[Store working files in workdir]:workdir:_files -/' \ + '-f[Read configuration options from conffile]:conf file:_files' \ + '-k[Trust an RSA key with SHA256 of KEY]:RSA key:' \ + '-r[Specify the new release]:new release:' \ + '-s[Fetch files from the specified server or server pool]:server:_hosts' \ + '-f[Mail output of cron command, if any, to address]:address:' \ + ':command:_values -S " " -w "commands" $flags[@]' diff --git a/Completion/BSD/Command/_portaudit b/Completion/BSD/Command/_portaudit new file mode 100644 index 000000000..879e4c537 --- /dev/null +++ b/Completion/BSD/Command/_portaudit @@ -0,0 +1,14 @@ +#compdef portaudit + +_arguments -s \ + '-a[Vulnerability report for all installed packages]' \ + '-C[Vulnerability report for the port in the current working directory]' \ + '-d[Print creation date of the database]' \ + '-f[Check the packages listed in file]:file:_files' \ + '-F[Fetch the current database]' \ + '-q[Quiet mode]' \ + '-V[Show portaudit version number]' \ + '-v[Verbose mode]' \ + '-r[Restrict listed vulnerabilities with eregex pattern]:eregex:' \ + '-X[Download a fresh database]:days:' \ + ':pkg-name:_files' diff --git a/Completion/BSD/Command/_portlint b/Completion/BSD/Command/_portlint index d3619bbca..4cbeb20c6 100644 --- a/Completion/BSD/Command/_portlint +++ b/Completion/BSD/Command/_portlint @@ -12,6 +12,6 @@ _arguments -s \ '-t[nit pick about use of spaces]' \ '-N[writing a new port]' \ '-V[print the version and exit]' \ - '-M:set make variables to ENV (ex. PORTSDIR=/usr/ports.work):_guard ".#" "environment vars"' \ - '-B:allow # contiguous blank lines:_guard "[0-9]#" "numeric value"' \ + '-M[set make variables to ENV (ex. PORTSDIR=/usr/ports.work)]: :_guard ".#" "environment vars"' \ + '-B[allow # contiguous blank lines]: :_guard "[0-9]#" "numeric value"' \ ':port directory:_files -/' diff --git a/Completion/BSD/Command/_portsnap b/Completion/BSD/Command/_portsnap index 1808bcd20..505c7a321 100644 --- a/Completion/BSD/Command/_portsnap +++ b/Completion/BSD/Command/_portsnap @@ -11,13 +11,13 @@ flags=( ) _arguments -C -s \ - '-d:Store working files in workdir:_files -/' \ - '-f:Read configuration options from conffile:_files' \ + '-d[Store working files in workdir]:workdir:_files -/' \ + '-f[Read configuration options from conffile]:conf file:_files' \ '-I[Update INDEX only. (update command only)]' \ - '-k:Trust an RSA key with SHA256 hash of KEY:_files' \ - '-l:Merge the specified local describes file into the INDEX:_files' \ - '-p:Location of uncompressed ports tree:_files -/' \ - '-s:Server from which to fetch updates:_hosts' \ + '-k[Trust an RSA key with SHA256 hash of KEY]:RSA key:_files' \ + '-l[Merge the specified local describes file into the INDEX]:file:_files' \ + '-p[Location of uncompressed ports tree]:uncompressed ports tree:_files -/' \ + '-s[Server from which to fetch updates]:server:_hosts' \ '*:principal:->principal' && ret=0 if [[ $state == principal ]]; then diff --git a/Completion/BSD/Command/_powerd b/Completion/BSD/Command/_powerd new file mode 100644 index 000000000..8b275ed89 --- /dev/null +++ b/Completion/BSD/Command/_powerd @@ -0,0 +1,13 @@ +#compdef powerd + +local powerd_mode +powerd_mode=(minimum maximum adaptative) +_arguments -s \ + "-a[Mode to use while on AC power]:mode:($powerd_mode)" \ + "-b[Mode to use while on battery power]:mode:($powerd_mode)" \ + '-i[CPU idle percent level when begin to degrade performance]:percent:' \ + "-n[mode to use normally when the AC line state is unknown]:mode:($powerd_mode)" \ + '-p[polling interval (in milliseconds) for AC line state and system idle levels]:interval:' \ + '-P[Alternative pidfile]:pidfile:_files' \ + '-r[CPU idle percent level where to increase performance]:percent:' \ + '-v[Verbose mode]' diff --git a/Completion/Solaris/Command/.distfiles b/Completion/Solaris/Command/.distfiles index 3c606773b..c755d3dde 100644 --- a/Completion/Solaris/Command/.distfiles +++ b/Completion/Solaris/Command/.distfiles @@ -1,4 +1,5 @@ DISTFILES_SRC=' +.distfiles _coreadm _dhcpinfo _dumpadm diff --git a/Completion/Solaris/Type/.distfiles b/Completion/Solaris/Type/.distfiles index cbe93b813..8db1e1aaa 100644 --- a/Completion/Solaris/Type/.distfiles +++ b/Completion/Solaris/Type/.distfiles @@ -1,3 +1,4 @@ DISTFILES_SRC=' +.distfiles _svcs_fmri ' diff --git a/Completion/Unix/Command/_zfs b/Completion/Unix/Command/_zfs index 21ab5eaa9..f4b980e21 100644 --- a/Completion/Unix/Command/_zfs +++ b/Completion/Unix/Command/_zfs @@ -236,3 +236,241 @@ _zfs() { } _zfs "$@" +#compdef zfs + +_zfs() { + local context state line expl + typeset -A opt_args + local -a subcmds rw_properties rw_propnames ro_properties + + subcmds=( + "create" "destroy" "clone" "promote" "rename" "snapshot" + "rollback" "list" "set" "get" "inherit" "mount" "unmount" + "share" "unshare" "send" "receive" "allow" "unallow" + "upgrade" + ) + + ro_properties=( + "name" "type" "creation" "used" "available" "referenced" + "compressratio" "mounted" "origin" + ) + + # TODO: Be cleverer about what values can be set. Is there any way to + # set the sorting for *size properties to false by default? + rw_properties=( + "aclinherit:value:(discard noallow secure passthrough)" + "aclmode:value:(discard groupmask passthrough)" + "atime:value:(on off)" + "canmount:value:(on off)" + "checksum:value:(on off fletcher2 fletcher4 sha256)" + "compression:value:(on off lzjb gzip gzip-{1..9})" + "copies:value:(1 2 3)" + "devices:value:(on off)" + "exec:value:(on off)" + "mountpoint:value:{if [[ -prefix /* ]]; then _path_files -/; else _wanted mountpoints expl 'mountpoint (type \"/\" to start completing paths)' compadd legacy none; fi}" + "quota:number or 'none':{if [[ -prefix [0-9]## ]]; then _message -e 'number'; elif [[ $PREFIX == quota= ]]; then _wanted none expl 'number or none' compadd none; else _wanted none expl 'quota' compadd none; fi}" + "readonly:value:(on off)" + "recordsize:value:(512 1K 2K 4K 8K 16K 32K 64K 128K)" + "reservation:value:" # <size>, "none" + "setuid:value:(on off)" + "shareiscsi:value:(on off)" # or "type=<type>" + "sharenfs:value:(on off)" # or share(1M) options + "snapdir:value:(hidden visible)" + "version:value:(1 2 current)" + "volblocksize:value:(512 1K 2K 4K 8K 16K 32K 64K 128K)" + "volsize:value:" # <size> + "xattr:value:(on off)" + "zoned:value:(on off)" + ) + + rw_propnames=( ${rw_properties%%:*} ) + + if [[ $service == "zfs" ]]; then + _arguments -C -A "-*" \ + '-\?[Help]' \ + '*::command:->subcmd' && return 0 + + if (( CURRENT == 1 )); then + _wanted commands expl "zfs subcommand" compadd -a subcmds + return + fi + service="$words[1]" + curcontext="${curcontext%:*}=$service:" + fi + + case $service in + ("create") + _arguments -A "-*" \ + '-p[Create parent datasets]' \ + '-o[Set initial properties]:property:_values -s , "property" $rw_properties' \ + - set1 \ + ':filesystem:' \ + - set2 \ + '-s[Create sparse volume]' \ + '-b[Set volblocksize]:blocksize:' \ + '-V[Set size]:size:' \ + ':volume:' + ;; + + ("destroy") + _arguments -A "-*" \ + '-r[Recursively destroy all children]' \ + '-R[Recursively destroy all dependents]' \ + '-f[Force unmounts]' \ + ':filesystem/volume/snapshot:_zfs_dataset' + ;; + + ("snapshot") + _arguments -A "-*" \ + '-r[Recursively snapshot all descendant datasets]' \ + ':filesystem/volume:_zfs_dataset -t fs -t vol -S@' + ;; + + ("rollback") + _arguments -A "-*" \ + '-r[Recursively destroy more recent snapshots]' \ + '-R[Recursively destroy more recent snapshots and clones]' \ + '-f[Force unmounts]' \ + ':snapshot:_zfs_dataset -t snap' + ;; + + ("clone") + _arguments -A "-*" \ + '-p[Create parent datasets]' \ + # XXX needs to bail if there are no snapshots + ':snapshot:_zfs_dataset -t snap' \ + ':filesystem/volume:' + ;; + + ("promote") + # XXX complete only cloned filesystems + _arguments \ + ':filesystem:_zfs_dataset -t fs' \ + ;; + + ("rename") + _arguments -A "-*" \ + - set1 \ + '-p[Create parent datasets]' \ + ':filesystem/volume/snapshot:_zfs_dataset' \ + ':filesystem/volume/snapshot:' \ + - set2 \ + '-r[Recursively rename snapshots of all descendent datasets]' \ + ':snapshot:_zfs_dataset -t snap' \ + ':snapshot:' + ;; + + ("list") + _arguments -A "-*" \ + '-r[Recursively display children]' \ + '-H[Scripting mode]' \ + '-o[Properties to list]:property:_values -s , "property" $ro_properties $rw_propnames' \ + '*-s[Sort key (ascending)]:property:_values "property" $ro_properties $rw_propnames' \ + '*-S[Sort key (descending)]:property:_values "property" $ro_properties $rw_propnames' \ + '-t[Dataset types to list]:dataset type:_values -s , "dataset type" filesystem snapshot volume' \ + '*:filesystem/volume/snapshot:_zfs_dataset' + ;; + + ("set") + _arguments \ + ':property:_values -s , "property" $rw_properties' \ + '*:filesystem/volume:_zfs_dataset -t fs -t vol' + ;; + + ("get") + _arguments -A "-*" \ + "-r[Recursively display children's properties]" \ + '-H[Scripting mode]' \ + '-p[Display numbers exactly]' \ + '-s[Specify sources]:source:_values -s , "source" local default inherited temporary none' \ + '-o[Specify fields]:field:_values -s , "field" name property value source' \ + ':property:_values -s , "property" $ro_properties $rw_propnames all' \ + '*:filesystem/volume/snapshot:_zfs_dataset' + ;; + + ("inherit") + _arguments -A "-*" \ + '-r[Recursively inherit property for all children]' \ + ':property:_values -s , "property" $ro_properties $rw_properties' \ + '*:filesystem/volume:_zfs_dataset -t fs -t vol' + ;; + + ("mount") + _arguments -A "-*" \ + '-o[Mount options]:mount options:_values -s , "option" {,no}{devices,exec,setuid} ro rw' \ + '-O[Overlay mount]' \ + '-v[Report mount progress]' \ + - set1 \ + ':filesystem:_zfs_dataset -t fs' \ + - set2 \ + '-a[Mount all available ZFS filesystems]' + ;; + + ("unmount") + _arguments -A "-*" \ + - set1 \ + '-f[Force unmount]' \ + ':filesystem:_zfs_dataset -t fs -t mtpt' \ + - set2 \ + '-a[Unmount all ZFS filesystems]' + ;; + + ("share") + _arguments -A "-*" \ + - set1 \ + '-a[Share all available ZFS filesystems]' \ + - set2 \ + ':filesystem:_zfs_dataset -t fs' + ;; + + ("unshare") + _arguments -A "-*" \ + - set1 \ + '-a[Unshare all shared ZFS filesystems]' \ + - set2 \ + '-F[Force unshare]' \ + ':filesystem:_zfs_dataset -t fs -t mtpt' + ;; + + ("send") + _arguments -A "-*" \ + '-i[Generate an incremental stream]:snapshot:_zfs_dataset -t snap' \ + ':snapshot:_zfs_dataset -t snap' + ;; + + ("receive") + _arguments -A "-*" \ + '-v[Verbose]' \ + '-n[Do not receive the stream]' \ + '-F[Force a rollback if necessary]' \ + - set1 \ + ':filesystem/volume/snapshot:_zfs_dataset' \ + - set2 \ + '-d[Set path prefix]:filesystem:_zfs_dataset -t fs' + ;; + + ("allow"|"unallow") + _message "unimplemented zfs subcommand: $service" + ;; + + ("upgrade") + _arguments -A "-*" \ + - set1 \ + '-v[Verbose]' \ + - set2 \ + '-a[Upgrade all filesystems on all pools]' \ + '-r[Upgrade descendent filesystems, too]' \ + '-V[Upgrade to specified version]:version:(1 2)' \ + - set3 \ + '-r[Upgrade descendent filesystems, too]' \ + '-V[Upgrade to specified version]:version:(1 2)' \ + ':filesystem:_zfs_dataset -t fs' \ + ;; + + (*) + _message "unknown zfs subcommand: $service" + ;; + esac +} + +_zfs "$@" diff --git a/Completion/Unix/Command/_zpool b/Completion/Unix/Command/_zpool index ae98c2b7f..40628e82c 100644 --- a/Completion/Unix/Command/_zpool +++ b/Completion/Unix/Command/_zpool @@ -199,3 +199,204 @@ _zpool() { } _zpool "$@" +#compdef zpool + +_zpool() { + local -a subcmds fields + + subcmds=( + create destroy add remove list iostat status online + offline clear attach detach replace scrub import export + upgrade history get set + ) + + fields=( + name\:"Pool name" size\:"Total size" used\:"Space used" + available\:"Space available" capacity\:"Space used (percentage)" + health\:"Health status" + ) + + properties=( + "bootfs:value:" + "autoreplace:value:(on off)" + "delegation:value:(on off)" + ) + propnames=( ${properties%%:*} ) + + import_properties=( + xattr + copies + shareiscsi + canmount + share + sharenfs + userprop + mount + ) + + if [[ $service == "zpool" ]]; then + _arguments -C -A "-*" \ + '-\?[Help]' \ + '*::command:->subcmd' && return 0 + + if (( CURRENT == 1 )); then + _wanted commands expl "zpool subcommand" compadd -a subcmds + return + fi + service="$words[1]" + curcontext="${curcontext%:*}=$service:" + fi + + case $service in + (clear) + _arguments \ + ':pool name:_zfs_pool' \ + '*:virtual device:_files' + ;; + + (create) + # TODO: investigate better vdev handling + _arguments -A "-*" \ + '-f[Force use of in-use devices]' \ + '-n[Display configuration without creating pool]' \ + '-R[Use alternate root]:alternate root:_files -/' \ + '-m[Set mountpoint for root dataset]:mountpoint:' \ + ':pool name:' \ + '*:virtual device:_files' + ;; + + (destroy) + _arguments -A "-*" \ + '-f[Force active datasets to be unmounted]' \ + ':pool name:_zfs_pool' + ;; + + (add) + _arguments -A "-*" \ + '-f[Force use of in-use devices]' \ + '-n[Display configuration without modifying pool]' \ + ':pool name:_zfs_pool' \ + '*:virtual device:_files' + ;; + + (list) + _arguments \ + '-H[Scripted mode]' \ + '-o[Fields to list]:field:_values -s , "field" ${^fields/\:/[}\]' \ + '::pool name:_zfs_pool' + ;; + + (iostat) + _arguments -A "-*" \ + '-v[Verbose statistics]' \ + '*::pool name:_zfs_pool' \ + '::interval:' \ + '::count:' + ;; + + (status) + _arguments -A "-*" \ + '-v[Verbose information]' \ + '-x[Show only unhealthy pools]' \ + '*::pool name:_zfs_pool' + ;; + + (offline) + _arguments -A "-*" \ + '-t[Offline until next reboot]' \ + ':pool name:_zfs_pool' \ + '*:virtual device:_files' + ;; + + (online) + _arguments \ + ':pool name:_zfs_pool' \ + '*:virtual device:_files' + ;; + + (attach) + # TODO: first device should choose first from existing. + _arguments \ + '-f[Force attach, even if in use]' \ + ':pool name:_zfs_pool' \ + ':virtual device:_files' \ + ':virtual device:_files' + ;; + + (detach) + _arguments \ + ':pool name:_zfs_pool' \ + ':virtual device:_files' + ;; + + (replace) + _arguments -A "-*" \ + '-f[Force attach, even if in use]' \ + ':pool name:_zfs_pool' \ + ':virtual device:_files' \ + '::virtual device:_files' + ;; + + (scrub) + _arguments -A "-*" \ + '-s[Stop scrubbing]' \ + '*:pool name:_zfs_pool' + ;; + + (export) + _arguments -A "-*" \ + '-f[Forcefully unmount all datasets]' \ + '*:pool name:_zfs_pool' + ;; + + (import) + # TODO: -o should complete options + _arguments -A "-*" \ + '*-d[Search for devices or files in directory]:_files -/' \ + '-D[Destroyed pools]' \ + '-f[Force import]' \ + - set1 \ + '-o[Mount options]' \ + '-p[Set property]:property:_values -s , "property" $import_properties' \ + '-R[Alternate root]:_files -/' \ + '*:pool name or id:_zfs_pool' \ + '::new pool name:' \ + - set2 \ + '-a[All pools]' + ;; + + (get) + _arguments -A "-*" \ + ':property:_values -s , "property" $propnames all' \ + '*:pool name:_zfs_pool' + ;; + + (set) + _arguments -A "-*" \ + ':property:_values -s , "property" $properties' \ + '*:pool name:_zfs_pool' + ;; + + (upgrade) + _arguments -A "-*" \ + - set1 \ + '-v[Display ZFS versions and descriptions]' \ + - set2 \ + '-a[Upgrade all pools]' \ + '*:pool name:_zfs_pool' + ;; + + (history) + _arguments -A "-*" \ + '-i[Display internal events]' \ + '-l[Long format]' \ + '*:pool name:_zfs_pool' + ;; + + (*) + _message "unknown zpool subcommand: $service" + ;; + esac +} + +_zpool "$@" |