diff options
Diffstat (limited to 'completions/ip')
-rw-r--r-- | completions/ip | 237 |
1 files changed, 145 insertions, 92 deletions
diff --git a/completions/ip b/completions/ip index f7e6e7c2..12ad9aa3 100644 --- a/completions/ip +++ b/completions/ip @@ -2,9 +2,9 @@ _iproute2_etc() { - COMPREPLY+=( $(compgen -W \ + COMPREPLY+=($(compgen -W \ "$(awk '!/#/ { print $2 }' /etc/iproute2/$1 2>/dev/null)" \ - -- "$cur") ) + -- "$cur")) } _ip() @@ -13,100 +13,99 @@ _ip() _init_completion || return case $prev in - -V|-Version|-rc|-rcvbuf) + -V | -Version | -rc | -rcvbuf) return ;; - -f|-family) - COMPREPLY=( $(compgen -W 'inet inet6 ipx dnet link' -- "$cur") ) + -f | -family) + COMPREPLY=($(compgen -W 'inet inet6 ipx dnet link' -- "$cur")) return ;; - -b|-batch) + -b | -batch) _filedir return ;; -force) - COMPREPLY=( $(compgen -W '-batch' -- "$cur") ) + COMPREPLY=($(compgen -W '-batch' -- "$cur")) return ;; esac - local subcword cmd subcmd - for (( subcword=1; subcword < ${#words[@]}-1; subcword++ )); do + local subcword cmd subcmd="" + for ((subcword = 1; subcword < ${#words[@]} - 1; subcword++)); do [[ ${words[subcword]} == -b?(atch) ]] && return - [[ -n $cmd ]] && subcmd=${words[subcword]} && break + [[ -v cmd ]] && subcmd=${words[subcword]} && break [[ ${words[subcword]} != -* && \ - ${words[subcword-1]} != -@(f?(amily)|rc?(vbuf)) ]] && \ + ${words[subcword - 1]} != -@(f?(amily)|rc?(vbuf)) ]] && cmd=${words[subcword]} done - if [[ -z $cmd ]]; then + if [[ ! -v cmd ]]; then case $cur in -*) local c="-Version -statistics -details -resolve -family -oneline -timestamp -batch -rcvbuf" - [[ $cword -eq 1 ]] && c+=" -force" - COMPREPLY=( $(compgen -W "$c" -- "$cur") ) - return + ((cword == 1)) && c+=" -force" + COMPREPLY=($(compgen -W "$c" -- "$cur")) ;; *) - COMPREPLY=( $(compgen -W "help $($1 help 2>&1 | command sed -e \ + COMPREPLY=($(compgen -W "help $($1 help 2>&1 | command sed -e \ '/OBJECT := /,/}/!d' -e \ 's/.*{//' -e \ 's/}.*//' -e \ - 's/|//g')" -- "$cur") ) - return + 's/|//g')" -- "$cur")) ;; esac + return fi [[ $subcmd == help ]] && return case $cmd in - l|link) + l | link) case $subcmd in add) # TODO ;; delete) - case $(($cword-$subcword)) in + case $((cword - subcword)) in 1) _available_interfaces ;; 2) - COMPREPLY=( $(compgen -W 'type' -- "$cur") ) + COMPREPLY=($(compgen -W 'type' -- "$cur")) ;; 3) - [[ $prev == type ]] && \ - COMPREPLY=( $(compgen -W 'vlan veth vcan dummy - ifb macvlan can' -- "$cur") ) + [[ $prev == type ]] && + COMPREPLY=($(compgen -W 'vlan veth vcan dummy + ifb macvlan can' -- "$cur")) ;; esac ;; set) - if [[ $cword-$subcword -eq 1 ]]; then + if ((cword - subcword == 1)); then _available_interfaces else case $prev in - arp|dynamic|multicast|allmulticast|promisc|\ - trailers) - COMPREPLY=( $(compgen -W 'on off' -- "$cur") ) - ;; - txqueuelen|name|address|broadcast|mtu|netns|alias) + arp | dynamic | multicast | allmulticast | promisc | \ + trailers) + COMPREPLY=($(compgen -W 'on off' -- "$cur")) ;; + txqueuelen | name | address | broadcast | mtu | netns | alias) ;; + *) local c="arp dynamic multicast allmulticast promisc trailers txqueuelen name address broadcast mtu netns alias" [[ $prev != @(up|down) ]] && c+=" up down" - COMPREPLY=( $(compgen -W "$c" -- "$cur") ) + COMPREPLY=($(compgen -W "$c" -- "$cur")) ;; esac fi ;; show) - if [[ $cword -eq $subcword+1 ]]; then + if ((cword == subcword + 1)); then _available_interfaces - COMPREPLY+=( $(compgen -W 'dev group up' -- "$cur") ) + COMPREPLY+=($(compgen -W 'dev group up' -- "$cur")) elif [[ $prev == dev ]]; then _available_interfaces elif [[ $prev == group ]]; then @@ -114,16 +113,16 @@ _ip() fi ;; *) - [[ $cword -eq $subcword ]] && \ - COMPREPLY=( $(compgen -W 'help add delete set show' \ - -- "$cur") ) + ((cword == subcword)) && + COMPREPLY=($(compgen -W 'help add delete set show' \ + -- "$cur")) ;; esac ;; - a|addr|address) + a | addr | address) case $subcmd in - add|change|replace) + add | change | replace) if [[ $prev == dev ]]; then _available_interfaces elif [[ $prev == scope ]]; then @@ -141,12 +140,12 @@ _ip() : # TODO fi ;; - show|flush) - if [[ $cword -eq $subcword+1 ]]; then + show | flush) + if ((cword == subcword + 1)); then _available_interfaces - COMPREPLY+=( $(compgen -W 'dev scope to label dynamic + COMPREPLY+=($(compgen -W 'dev scope to label dynamic permanent tentative deprecated dadfailed temporary - primary secondary up' -- "$cur") ) + primary secondary up' -- "$cur")) elif [[ $prev == dev ]]; then _available_interfaces elif [[ $prev == scope ]]; then @@ -154,16 +153,16 @@ _ip() fi ;; *) - [[ $cword -eq $subcword ]] && \ - COMPREPLY=( $(compgen -W 'help add change replace del - show flush' -- "$cur") ) + ((cword == subcword)) && + COMPREPLY=($(compgen -W 'help add change replace del + show flush' -- "$cur")) ;; esac ;; addrlabel) case $subcmd in - list|add|del|flush) + list | add | del | flush) if [[ $prev == dev ]]; then _available_interfaces else @@ -171,16 +170,16 @@ _ip() fi ;; *) - [[ $cword -eq $subcword ]] && \ - COMPREPLY=( $(compgen -W 'help list add del flush' \ - -- "$cur") ) + ((cword == subcword)) && + COMPREPLY=($(compgen -W 'help list add del flush' \ + -- "$cur")) ;; esac ;; - route) + r | route) case $subcmd in - list|flush) + list | flush) if [[ $prev == proto ]]; then _iproute2_etc rt_protos else @@ -190,44 +189,79 @@ _ip() get) # TODO ;; - add|del|change|append|replace|monitor) - # TODO + a | add | d | del | change | append | r | replace | monitor) + if [[ $prev == via ]]; then + COMPREPLY=($(compgen -W "$($1 r | command sed -ne \ + 's/.*via \([0-9.]*\).*/\1/p')" -- "$cur")) + elif [[ $prev == "$subcmd" ]]; then + COMPREPLY=($(compgen -W "table default \ + $($1 r | cut -d ' ' -f 1)" -- "$cur")) + elif [[ $prev == dev ]]; then + _available_interfaces -a + elif [[ $prev == table ]]; then + COMPREPLY=($(compgen -W 'local main default' -- "$cur")) + else + COMPREPLY=($(compgen -W 'via dev weight' -- "$cur")) + fi ;; *) - [[ $cword -eq $subcword ]] && \ - COMPREPLY=( $(compgen -W 'help list flush get add del - change append replace monitor' -- "$cur") ) + ((cword == subcword)) && + COMPREPLY=($(compgen -W 'help list flush get add del + change append replace monitor' -- "$cur")) ;; esac ;; rule) case $subcmd in - add|del) - # TODO + add | del | list | lst) + case $prev in + from | to | tos | dsfield | fwmark | uidrange | ipproto | sport | \ + dport | priority | protocol | suppress_prefixlength | \ + suppress_ifgroup | realms | nat | goto) ;; + + iif | oif) + _available_interfaces -a + ;; + table | lookup) + COMPREPLY=($(compgen -W 'local main default' -- "$cur")) + ;; + *) + COMPREPLY=($(compgen -W 'from to tos dsfield fwmark + uidrange ipproto sport dport priority table lookup + protocol suppress_prefixlength suppress_ifgroup realms + nat goto iif oif not' -- "$cur")) + ;; + esac ;; - flush|show|list|lst) + flush | save) + if [[ $prev == protocol ]]; then + : + else + COMPREPLY=($(compgen -W 'protocol' -- "$cur")) + fi ;; + restore | show) ;; *) - [[ $cword -eq $subcword ]] && \ - COMPREPLY=( $(compgen -W 'help list add del flush' \ - -- "$cur") ) + ((cword == subcword)) && + COMPREPLY=($(compgen -W 'help add del list flush save + restore show' -- "$cur")) ;; esac ;; neigh) case $subcmd in - add|del|change|replace) + add | del | change | replace) # TODO ;; - show|flush) + show | flush) # TODO ;; *) - [[ $cword -eq $subcword ]] && \ - COMPREPLY=( $(compgen -W 'help add del change replace - show flush' -- "$cur") ) + ((cword == subcword)) && + COMPREPLY=($(compgen -W 'help add del change replace + show flush' -- "$cur")) ;; esac ;; @@ -241,45 +275,45 @@ _ip() # TODO ;; *) - [[ $cword -eq $subcword ]] && \ - COMPREPLY=( $(compgen -W 'help change show' \ - -- "$cur") ) + ((cword == subcword)) && + COMPREPLY=($(compgen -W 'help change show' \ + -- "$cur")) ;; esac ;; tunnel) case $subcmd in - show) - ;; - add|change|del|prl|6rd) + show) ;; + + add | change | del | prl | 6rd) # TODO ;; *) - [[ $cword -eq $subcword ]] && \ - COMPREPLY=( $(compgen -W 'help add change del show prl - 6rd' -- "$cur") ) + ((cword == subcword)) && + COMPREPLY=($(compgen -W 'help add change del show prl + 6rd' -- "$cur")) ;; esac ;; maddr) case $subcmd in - add|del) + add | del) # TODO ;; show) if [[ $cword -eq $subcword+1 || $prev == dev ]]; then _available_interfaces - [[ $prev != dev ]] && \ - COMPREPLY=( $(compgen -W '${COMPREPLY[@]} dev' \ - -- "$cur") ) + [[ $prev != dev ]] && + COMPREPLY=($(compgen -W '${COMPREPLY[@]} dev' \ + -- "$cur")) fi ;; *) - [[ $cword -eq $subcword ]] && \ - COMPREPLY=( $(compgen -W 'help add del show' \ - -- "$cur") ) + ((cword == subcword)) && + COMPREPLY=($(compgen -W 'help add del show' \ + -- "$cur")) ;; esac ;; @@ -290,8 +324,8 @@ _ip() # TODO ;; *) - [[ $cword -eq $subcword ]] && \ - COMPREPLY=( $(compgen -W 'help show' -- "$cur") ) + ((cword == subcword)) && + COMPREPLY=($(compgen -W 'help show' -- "$cur")) ;; esac ;; @@ -300,26 +334,45 @@ _ip() case $subcmd in all) ;; *) - [[ $cword -eq $subcword ]] && \ - COMPREPLY=( $(compgen -W 'help all' -- "$cur") ) + ((cword == subcword)) && + COMPREPLY=($(compgen -W 'help all' -- "$cur")) + ;; + esac + ;; + + netns) + case $subcmd in + list | monitor) ;; + + add | identify | list-id) + # TODO + ;; + delete | exec | pids | set) + [[ $prev == "$subcmd" ]] && + COMPREPLY=($(compgen -W "$($1 netns list)" -- "$cur")) + ;; + *) + ((cword == subcword)) && + COMPREPLY=($(compgen -W 'help add delete exec + identify list list-id monitor pids set' -- "$cur")) ;; esac ;; xfrm) case $subcmd in - state|policy|monitor) + state | policy | monitor) # TODO ;; *) - [[ $cword -eq $subcword ]] && \ - COMPREPLY=( $(compgen -W 'state policy monitor' \ - -- "$cur") ) + ((cword == subcword)) && + COMPREPLY=($(compgen -W 'state policy monitor' \ + -- "$cur")) ;; esac ;; esac } && -complete -F _ip ip + complete -F _ip ip # ex: filetype=sh |