#compdef sysctl local -a args case $OSTYPE in freebsd<10->.*) args+=( '-f+[specify file of name/value pairs to process first]:file:_files' '-T[display only variables that are setable via loader]' '-W[display only writable variables that are not statistical]' ) ;| dragonfly*|freebsd*) args+=( "-i[silently exit if variable doesn't exist]" ) ;| freebsd*) local -a sysctlvars sysctlvars=( $(_call_program sysctl-variables sysctl -aN) ) _arguments -s -S -A "-*" $args \ '(-a -o *)-A[equivalent to -o -a (for compatibility)]' \ '(*)-a[list all]' \ '-b[binary output]' \ '-d[print the description of the variable instead of its value]' \ '(-N -n)-e[separate name and value with =]' \ '-h[format output for human readability]' \ '(-n)-N[show only variable names]' \ '(-N)-n[show only variable values]' \ '(-x)-o[show opaques as well (values suppressed)]' \ '-q[suppress some warnings]' \ '(* -o)-X[equivalent to -x -a (for compatibility)]' \ '(-o)-x[show opaques as well (entire values)]' \ '(-a)*:sysctl variable:_multi_parts -i . sysctlvars' ;; darwin*|dragonfly*) : ${(A)_cache_sysctlvars:=${${$(sysctl -A 2>/dev/null):#[^a-z]*}%%:*}} _arguments -s -A "-*" $args \ '(-w -X *)-a[list all]' \ '(-w -X *)-A[show all opaques (values suppressed)]' \ '(-w)-b[binary output]' \ '(-w)-n[show only variable values]' \ '(-a -A -b -n -X)-w[write mode]' \ '(-a -A -w *)-X[show all opaques (entire values)]' \ '(-a -A -X)*:sysctl variable:_multi_parts ${words[(r)-w]:+-S=} -i . _cache_sysctlvars' ;; linux*) _arguments -A "-*" \ '-n[show only variable values]' \ '(-n -p -a -A)-w[write mode]' \ '(-n -w -a -A *)-p[specify file to load sysctl settings from]:file:_files' \ '(-n -w -p -A *)-a[list all]' \ '(-n -w -p -a *)-A[list all in table form]' \ '(-n -p -a -A)*:sysctl variable:_files -W /proc/sys' ;; openbsd*) : ${(A)_cache_sysctlvars:=${${${(f)"$(sysctl -a 2>/dev/null)"}%%=*}:# *}} _arguments -S -s -A "-*" \ '(-A -q *)-a[list all string and integer variables]' \ '(-a -q *)-A[list all known variables]' \ '-n[show only values]' \ '(-a -A)-q[suppress all output when setting a variable]' \ '(-a -A)*:sysctl variable:_multi_parts -i -S = -q . _cache_sysctlvars' ;; *) _default ;; esac