@@ -15,6 +15,19 @@ _comp_cmd_ip__netns()
15
15
) "
16
16
}
17
17
18
+ _comp_cmd_ip__link_types ()
19
+ {
20
+ _comp_compgen_split -- " $(
21
+ {
22
+ ${1-ip} -c=never link help || ${1-ip} link help
23
+ } 2>&1 | command sed -e \
24
+ ' /TYPE := /,/}/!d' -e \
25
+ ' s/.*{//' -e \
26
+ ' s/}.*//' -e \
27
+ ' s/|/ /g'
28
+ ) "
29
+ }
30
+
18
31
_comp_cmd_ip ()
19
32
{
20
33
local cur prev words cword comp_args
@@ -87,19 +100,12 @@ _comp_cmd_ip()
87
100
# TODO
88
101
;;
89
102
delete)
90
- case $(( cword - subcword)) in
91
- 1)
92
- _comp_compgen_available_interfaces
93
- ;;
94
- 2)
95
- _comp_compgen -- -W ' type'
96
- ;;
97
- 3)
98
- [[ $prev == type ]] &&
99
- _comp_compgen -- -W ' vlan veth vcan dummy ifb
100
- macvlan can'
101
- ;;
102
- esac
103
+ if [[ $prev == type ]]; then
104
+ _comp_cmd_ip__link_types " $1 "
105
+ else
106
+ _comp_compgen_available_interfaces
107
+ _comp_compgen -a -- -W ' type'
108
+ fi
103
109
;;
104
110
set)
105
111
if (( cword - subcword == 1 )) ; then
@@ -164,11 +170,13 @@ _comp_cmd_ip()
164
170
_comp_compgen_available_interfaces
165
171
_comp_compgen -a -- -W ' dev scope to label dynamic
166
172
permanent tentative deprecated dadfailed temporary
167
- primary secondary up'
173
+ primary secondary up type '
168
174
elif [[ $prev == dev ]]; then
169
175
_comp_compgen_available_interfaces
170
176
elif [[ $prev == scope ]]; then
171
177
_comp_cmd_ip__iproute2_etc rt_scopes
178
+ elif [[ $prev == type ]]; then
179
+ _comp_cmd_ip__link_types " $1 "
172
180
fi
173
181
;;
174
182
* )
0 commit comments