diff options
Diffstat (limited to 'Completion/Unix/Command/_fuser')
-rw-r--r-- | Completion/Unix/Command/_fuser | 75 |
1 files changed, 50 insertions, 25 deletions
diff --git a/Completion/Unix/Command/_fuser b/Completion/Unix/Command/_fuser index 5252839c5..6c291473f 100644 --- a/Completion/Unix/Command/_fuser +++ b/Completion/Unix/Command/_fuser @@ -1,42 +1,67 @@ #compdef fuser local -a args arg1 +typeset -A opt_args + +if _pick_variant -c $words[1] psmisc=psmisc unix -V; then + + (( $+functions[_fuser_services] )) || + _fuser_services() { + local expl suf ret=1 + + [[ $opt_args[-n] = ??p || $EUID = 0 ]] || return + + if compset -P '*/'; then + _wanted protocols expl protocol compadd tcp udp + elif compset -P '*,*,'; then + compset -S '/*' || [[ -n $opt_args[-n] ]] || suf=( -qS / ) + _ports $suf && ret=0 + elif compset -P '*,'; then + compset -S ',*' || suf=( -S , -r "/ \t\n\-" ) + _hosts $suf && ret=0 + else + compset -S ',*' || suf=( -S ${${opt_args[-n]/?*/,}:-/} -r "/, \t\n\-" ) + _ports $suf && ret=0 + fi + + return ret + } -if _pick_variant -c $words[1] gnu=GNU unix -V; then _arguments \ - '(-s)-a[show all files specified on the command line]' \ - {-c,-m}'[list all processes accessing files on the filesystem specified by name]' \ - '-k[kill processes accessing the file]' \ - '-i[ask for confirmation before killing]' \ - '-l[list all known signal names]' \ - '-n[select name space]:namespace:(file udp tcp)' \ - '(-a)-s[silent operation]' \ - '-signal[send alternate signal with -k]:signal:_signals' \ - '-u[append the user name of the process owner to each PID]' \ - '-v[verbose mode]' \ - '-V[display version information]' \ - '-4[search only for IPv4 sockets]' \ - '-6[search only for IPv6 sockets]' \ - ':name:_files' + '(-s)-a[show all files specified on the command line]' \ + {-c,-m}'[list all processes accessing files on the filesystem specified by name]' \ + '-k[kill processes accessing the file]' \ + '-i[ask for confirmation before killing]' \ + '-l[list all known signal names]' \ + '-n[select name space]:namespace:(file udp tcp)' \ + '(-a)-s[silent operation]' \ + '-signal[send alternate signal with -k]:signal:_signals' \ + '-u[append the user name of the process owner to each PID]' \ + '-v[verbose mode]' \ + '-V[display version information]' \ + '-4[search only for IPv4 sockets]' \ + '-6[search only for IPv6 sockets]' \ + '*:name: _alternative "files:file:_files" "services:service:_fuser_services"' + else case $OSTYPE in solaris2.9 ) args=( - '-n[list only processes with non-blocking mandatory locks]' - '-s[send alternate signal with -k]:signal:_signals' + '-n[list only processes with non-blocking mandatory locks]' + '-s[send alternate signal with -k]:signal:_signals' ) ;; sysv4 ) - (( $+words[(r)-k] )) && arg1=( ':signal: _alternative signals\:signal\:_signals\ -p files:name:_files' ) + (( $+words[(r)-k] )) && arg1=( ':name: _alternative signals\:signal\:_signals\ -p files:file:_files' ) ;; esac _arguments \ - '(-f)-c[list all processes accessing files on the filesystem specified by name]' \ - '(-c)-f[list all processes accessing named files]' \ - '-k[kill processes accessing the file]' \ - '-u[append the user name of the process owner to each PID]' \ - $args \ - $arg1 \ - '*:name:_files' + '(-f)-c[list all processes accessing files on the filesystem specified by name]' \ + '(-c)-f[list all processes accessing named files]' \ + '-k[kill processes accessing the file]' \ + '-u[append the user name of the process owner to each PID]' \ + $args \ + $arg1 \ + '*:file:_files' fi |