1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
# arp(8) completion -*- shell-script -*-
_comp_cmd_arp()
{
local cur prev words cword comp_args
_comp_initialize -- "$@" || return
local noargopts='!(-*|*[iApfHt]*)'
# shellcheck disable=SC2254
case $prev in
--device | -${noargopts}i)
_comp_compgen_available_interfaces -a
return
;;
--protocol | -${noargopts}[Ap])
# TODO protocol/address family
return
;;
--file | -${noargopts}f)
_comp_compgen_filedir
return
;;
--hw-type | -${noargopts}[Ht])
# TODO: parse from --help output?
_comp_compgen -- -W 'ash ether ax25 netrom rose arcnet dlci fddi
hippi irda x25 eui64'
return
;;
esac
if [[ $cur == -* ]]; then
_comp_compgen_help || _comp_compgen_usage
return
fi
local REPLY
_comp_count_args -a "@(--device|--protocol|--file|--hw-type|-${noargopts}[iApfHt])"
case $REPLY in
1)
local ips=$("$1" -an | command sed -ne \
's/.*(\([0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}\)).*/\1/p')
_comp_compgen -- -W '$ips'
;;
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 _comp_cmd_arp arp
# ex: filetype=sh
|