# arp(8) completion -*- shell-script -*- _arp() { local cur prev words cword _init_completion || return case $prev in --device | -!(-*)i) _available_interfaces -a return ;; --protocol | -!(-*)[Ap]) # TODO protocol/address family return ;; --file | -!(-*)f) _filedir return ;; --hw-type | -!(-*)[Ht]) # TODO: parse from --help output? COMPREPLY=($(compgen -W 'ash ether ax25 netrom rose arcnet \ dlci fddi hippi irda x25 eui64' -- "$cur")) return ;; esac if [[ $cur == -* ]]; then COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) return fi local args _count_args "" "@(--device|--protocol|--file|--hw-type|-!(-*)[iApfHt])" case $args in 1) local ips=$("$1" -an | command sed -ne \ 's/.*(\([0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}\)).*/\1/p') COMPREPLY=($(compgen -W '$ips' -- "$cur")) ;; 2) # TODO if -d mode: "pub"; if not -f mode: hw_addr # TODO hw_addr is a configured interface with --use-device/-*D* ;; 3) # TODO netmask|pub|temp if -s mode ;; 4) # TODO netmask value if previous was "netmask" ;; 5) # TODO "pub" if 3rd was "netmask" ;; esac } && complete -F _arp arp # ex: filetype=sh