找回密码
 注册
查看: 2129|回复: 2

使用nova采用tab 补全文件(openstack,nova)

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2021-9-3 09:01:14 | 显示全部楼层 |阅读模式
为了让nova 命令可以补全,因为有些时候,命令可能记不住,可以尝试使用此方法设置,当然自己开发的环境可能就自带:8 ?2 o* g/ X) V9 ?( w' k7 l  a2 i
切换到/etc/bash_completion.d目录下:0 B4 Y, U% I# ?' u
; _1 ^7 r; W; ~$ b8 U+ {
创建文件vim  nova.bash_completion 4 U/ ^9 U5 y/ c* U6 Y
+ J/ B& L9 y  `

- A& x5 c& |4 F+ Z+ v$ y) A_nova()6 f( q2 W  q) ]( G9 T+ s
{
4 X1 n  e% G% o! L  local cur prev words+ G) r+ `1 N( E" H
  COMPREPLY=()
( B( e( O0 T" ]% [- I- ^$ ?  _get_comp_words_by_ref -n : cur prev words3 @9 x7 _8 }4 E2 v
  # Command data:
( ]. G2 I  J: i, |% C  [3 i2 r  cmds='add-secgroup agent-create agent-delete agent-list agent-modify aggregate-add-host aggregate-cache-images aggregate-create aggregate-delete aggregate-list aggregate-remove-host aggregate-set-metadata aggregate-show aggregate-update availability-zone-list backup boot clear-password console-log delete diagnostics evacuate flavor-access-add flavor-access-list flavor-access-remove flavor-create flavor-delete flavor-key flavor-list flavor-show flavor-update force-delete get-mks-console get-password get-rdp-console get-serial-console get-spice-console get-vnc-console host-evacuate host-evacuate-live host-meta host-servers-migrate hypervisor-list hypervisor-servers hypervisor-show hypervisor-stats hypervisor-uptime image-create instance-action instance-action-list instance-usage-audit-log interface-attach interface-detach interface-list keypair-add keypair-delete keypair-list keypair-show limits list list-secgroup live-migration live-migration-abort live-migration-force-complete lock meta migrate migration-list pause quota-class-show quota-class-update quota-defaults quota-delete quota-show quota-update reboot rebuild refresh-network remove-secgroup rescue reset-network reset-state resize resize-confirm resize-revert restore resume server-group-create server-group-delete server-group-get server-group-list server-migration-list server-migration-show server-tag-add server-tag-delete server-tag-delete-all server-tag-list server-tag-set server-topology service-delete service-disable service-enable service-force-down service-list set-password shelve shelve-offload show ssh start stop suspend trigger-crash-dump unlock unpause unrescue unshelve update usage usage-list version-list volume-attach volume-attachments volume-detach volume-update bash-completion help --version --debug --os-cache --timings --os-region-name --service-type --service-name --os-endpoint-type --os-compute-api-version --os-endpoint-override --os-auth-type --insecure --os-cacert --os-cert --os-key --timeout --collect-timing --os-auth-url --os-system-scope --os-domain-id --os-domain-name --os-project-id --os-project-name --os-project-domain-id --os-project-domain-name --os-trust-id --os-default-domain-id --os-default-domain-name --os-user-id --os-username --os-user-domain-id --os-user-domain-name --os-password'3 B1 Q- G& ?+ A- a
  cmds_flavor='create delete list set show unset'
: J0 V* E2 ~3 p; A  cmds_flavor_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --id --ram --disk --ephemeral --swap --vcpus --rxtx-factor --public --private --property --project --description --project-domain'
) R+ v3 n% x  o- `  cmds_flavor_delete='-h --help'
7 A7 I+ t# b" \) J1 o! I2 y  cmds_flavor_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --public --private --all --long --marker --limit'; h- s$ G3 d; R5 G5 k' |7 f
  cmds_flavor_set='-h --help --no-property --property --project --description --project-domain'
5 l* ~- W& l% C6 H" k  cmds_flavor_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
- F, f! s: m: f( n  cmds_flavor_unset='-h --help --property --project --project-domain'0 {% g$ h& `% v; n) V/ @  m' h
  cmds_floating='ip'
) h5 h; u+ I6 g" `) b! n' A  cmds_floating_ip='create delete list pool port set show unset'
: B2 z% U: I$ l2 R0 [9 {2 \8 M( l  cmds_floating_ip_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --subnet --port --floating-ip-address --fixed-ip-address --qos-policy --description --project --dns-domain --dns-name --project-domain --tag --no-tag'" `# C; K0 C7 H6 i% X) r, |
  cmds_floating_ip_delete='-h --help'
- Q: z% A& K2 i, }  cmds_floating_ip_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --network --port --fixed-ip-address --floating-ip-address --long --status --project --project-domain --router --tags --any-tags --not-tags --not-any-tags'
3 U4 j; Y: C: ~4 G* [6 E. g  cmds_floating_ip_pool='list'
7 b! }' j) h  S/ i3 Z3 M4 Q  cmds_floating_ip_pool_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column'% B! r1 B2 ?$ ]
  cmds_floating_ip_port='forwarding': s7 U5 I" X3 s( R
  cmds_floating_ip_port_forwarding='create delete list set show'8 M1 _9 T2 K8 G2 V
  cmds_floating_ip_port_forwarding_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --internal-ip-address --port --internal-protocol-port --external-protocol-port --protocol'$ a4 V6 W& R2 q6 T8 E( c
  cmds_floating_ip_port_forwarding_delete='-h --help'
0 y6 x1 E$ T2 o% T/ p  cmds_floating_ip_port_forwarding_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --port --external-protocol-port --protocol'
9 P, s: A& p; h' H8 _: P6 z  cmds_floating_ip_port_forwarding_set='-h --help --port --internal-ip-address --internal-protocol-port --external-protocol-port --protocol'
& J2 U7 o% j5 _8 v  cmds_floating_ip_port_forwarding_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
  G" W$ O* g& c5 e- Y% l2 M  cmds_floating_ip_set='-h --help --port --fixed-ip-address --description --qos-policy --no-qos-policy --tag --no-tag'! C, {5 d1 s- }* i; b% |' A
  cmds_floating_ip_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix': }9 X" r  ^( D
  cmds_floating_ip_unset='-h --help --port --qos-policy --tag --all-tag'
. H8 O. T* z1 g  cmds_hypervisor='list show stats'
+ g- P7 ]  t6 a. c  cmds_hypervisor_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --matching --long'
+ z% D! m0 ]" G- v1 ^9 d& v  cmds_hypervisor_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
$ [$ `* ]! ~4 X) J" H6 P$ v6 ?  C' G  cmds_hypervisor_stats='show'$ l. J! U$ |; }& z# {4 d
  cmds_hypervisor_stats_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'4 Z. y1 S; j7 v& w' l; i
  cmds_image='add create delete list member remove save set show unset'
$ @2 d3 i. q( `, j" X! Y, q  cmds_image_add='project'
" B5 H" R  C0 ]5 I8 S* A8 g  cmds_image_add_project='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --project-domain'
) q1 I8 c/ I6 g' m2 \3 g' |+ A3 y  cmds_image_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --id --container-format --disk-format --min-disk --min-ram --file --volume --force --sign-key-path --sign-cert-id --protected --unprotected --public --private --community --shared --property --tag --project --project-domain --size --location --copy-from --checksum --store'
  Q7 I, d5 ~1 V- t; ]! W: Y  cmds_image_delete='-h --help'
5 D3 I$ {; o: D7 d  cmds_image_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --public --private --community --shared --property --name --status --member-status --tag --long --page-size --sort --limit --marker'0 S- i( m- n6 P" W) ~  q6 w
  cmds_image_member='list'
4 v; t- `) I) H9 N. _% T  cmds_image_member_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --project-domain'
2 ~. u3 ~: a6 U8 t5 l, A  cmds_image_remove='project'; i* F8 ?; |) d9 }0 F$ Y( ]0 k
  cmds_image_remove_project='-h --help --project-domain'- }1 q  L& v& a6 H% m( y* A
  cmds_image_save='-h --help --file'6 G' b1 V7 s6 A$ {- p1 R+ J
  cmds_image_set='-h --help --name --min-disk --min-ram --container-format --disk-format --protected --unprotected --public --private --community --shared --property --tag --architecture --instance-id --instance-uuid --kernel-id --os-distro --os-version --ramdisk-id --deactivate --activate --project --project-domain --visibility --accept --reject --pending'+ k9 u" \  I  u" h- o# u
  cmds_image_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --human-readable'$ I- g  E% D7 A9 Q
  cmds_image_unset='-h --help --tag --property'2 W8 \- C" r5 s& N: J
  cmds_server_delete='-h --help --wait'
; y' N4 @+ r& ~0 N( f  cmds_server_dump='create'
4 p& K+ T  _( o' n) X  cmds_server_dump_create='-h --help'& k2 N: \+ F' e0 N3 C# A
  cmds_server_event='list show'# C) i# N) q1 t/ B& W* J
  cmds_server_event_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --long'& r% f, ~) n3 k
  cmds_server_event_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
. ^8 f; c1 i+ l4 {1 b5 [- g# z9 W+ O  cmds_server_group='create delete list show'# s( t* Z0 L8 ]0 E$ p" b" ?/ f2 }
  cmds_server_group_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --policy'
$ u) P! |9 ?/ \  cmds_server_group_delete='-h --help'
; F! ?4 N# ~7 O4 \  cmds_server_group_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --all-projects --long'
$ d5 A% `7 q/ U" u' q. m  cmds_server_group_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'" |" F4 X3 B" X' D; w3 ?6 d
  cmds_server_image='create'
' K( Y, N" K2 }* }: f, Z  cmds_server_image_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --name --wait'6 ]2 r  |2 c; X9 J$ v  X5 w
  cmds_server_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --reservation-id --ip --ip6 --name --instance-name --status --flavor --image --host --all-projects --project --project-domain --user --user-domain --long -n --no-name-lookup --name-lookup-one-by-one --marker --limit --deleted --changes-before --changes-since --locked --unlocked'
2 Q6 l# m7 o5 I  cmds_server_lock='-h --help --reason'
* j% c5 d! H( y! F  W2 x  cmds_server_migrate='-h --help --live-migration --live --host --shared-migration --block-migration --disk-overcommit --no-disk-overcommit --wait'
9 N7 y9 K7 `( N, U8 L. q: \8 C  cmds_server_pause='-h --help'* r0 L# _7 w/ s7 M  ?
  cmds_server_reboot='-h --help --hard --soft --wait'3 k6 s7 @( _3 Q# V
  cmds_server_rebuild='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --image --password --property --description --wait --key-name --key-unset'
/ e+ ~/ v) m) u! G* h- Y( I  cmds_server_remove='fixed floating network port security volume'
  L5 Y, Q4 e# o( g1 |! r2 ^  cmds_server_remove_fixed='ip'
1 I$ k* b$ l7 {  cmds_server_remove_fixed_ip='-h --help'
- Z# z$ S: g+ K' R- n% ]  cmds_server_remove_floating='ip'
* h1 V8 k3 H# t8 T/ {  cmds_server_remove_floating_ip='-h --help'
% X# k5 D! W' P  cmds_server_remove_network='-h --help'1 n1 k- R4 j6 }& a# ]2 _
  cmds_server_remove_port='-h --help'- T1 s% g. ~- l; W8 \
  cmds_server_remove_security='group'
: E! U& D" i6 [; O% ~* W" t4 |  cmds_server_remove_security_group='-h --help'
" N6 p" e2 z6 |# x  w, C  cmds_server_remove_volume='-h --help', z; d" }. w" b# H8 q% }0 k) f5 o
  cmds_server_rescue='-h --help --image --password'
7 l6 |& r' H9 M" H$ q; J! l  cmds_server_resize='-h --help --flavor --confirm --revert --wait revert confirm'
& f: P1 {) V9 t6 v  cmds_server_resize_confirm='-h --help'% E& V2 b- w- c) C$ M/ m6 f# j
  cmds_server_resize_revert='-h --help'
4 {3 T+ `8 e1 U/ Y0 e. X: L: O6 x  cmds_server_restore='-h --help'4 d) [9 t2 l& c. P0 U/ b+ D3 I3 B" A+ x
  cmds_server_resume='-h --help'
/ K4 w( E% q: J  cmds_server_set='-h --help --name --root-password --property --state --description'( G! ?0 j, I, V2 A' `
  cmds_server_shelve='-h --help'
* i) X. }& t9 U- Q8 [. n) Z0 y  cmds_server_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --diagnostics') j/ W% C3 `; {  k$ Z
  cmds_server_ssh='-h --help --login -l --port -p --identity -i --option -o -4 -6 --public --private --address-type -v'1 I+ I9 Q4 X" g% p8 [5 u9 u
  cmds_server_start='-h --help'
) w8 ]. G) G1 x7 t& i( R, G  cmds_server_stop='-h --help'4 W0 A" m4 s, \. k' ]0 g9 u
  cmds_server_suspend='-h --help'
+ X! X. _3 o; I  cmds_server_unlock='-h --help'4 H1 W$ q& t4 h) U) A8 M
  cmds_server_unpause='-h --help'
3 N4 ]0 M! E5 \3 G8 o. B  U1 y- q  cmds_server_unrescue='-h --help'
8 c4 T1 G( \  _0 {& u% S0 \: D) S' Y" U  cmds_server_unset='-h --help --property --description'
! i0 P7 E% J5 T6 e  cmds_server_unshelve='-h --help --availability-zone'
, h  Z' b3 J1 X" R* ^% J  cmds_service='create delete list provider set show'
$ ]* E8 Z* L6 R- Z& u, T- q  cmds_service_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --name --description --enable --disable'! S2 j8 @! b: {2 U& U
  cmds_service_delete='-h --help'6 @- M% N7 z$ w: X2 ^4 b, _
  cmds_service_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --long'# O) w( K6 Y& d% @) b( K
  cmds_service_provider='create delete list set show'
' \/ \8 s# X, {' T" e$ {& _3 N  cmds_service_provider_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --auth-url --description --service-provider-url --enable --disable'  t# {* o) W3 ]; ]4 k9 O0 X$ k
  cmds_service_provider_delete='-h --help'
1 ~9 g: B) q, L/ q  cmds_service_provider_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column'  M% X" O+ c8 F: N- P+ n* \" |
  cmds_service_provider_set='-h --help --auth-url --description --service-provider-url --enable --disable'( i6 q) ?; _& ?0 D' U  @
  cmds_service_provider_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'- R2 a) c! D9 B# j6 W( A+ O- u# F
  cmds_service_set='-h --help --type --name --description --enable --disable': L$ F3 \( E  `3 G' x
  cmds_service_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'1 t) k) U! j9 O7 h; b4 [  h
  cmds_sfc='flow port service'8 y# |! [7 I# r' m) s0 j/ M( U
  cmds_sfc_flow='classifier'; Z. Z& ^! W- |
  cmds_sfc_flow_classifier='create delete list set show'
: G" ~) f, s/ }2 K# w" ?# ?% n$ i  cmds_sfc_flow_classifier_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --description --protocol --ethertype --source-port --destination-port --source-ip-prefix --destination-ip-prefix --logical-source-port --logical-destination-port --l7-parameters'
2 c; r* Z. v1 U; Z0 ?% |+ _+ U  cmds_sfc_flow_classifier_delete='-h --help'
1 `* V, C6 I8 g3 B9 ^  cmds_sfc_flow_classifier_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --long'- Z5 C9 C8 N+ A$ q6 u$ w7 ?! [
  cmds_sfc_flow_classifier_set='-h --help --name --description'
  O& v* v7 _; ]) \. B6 X, k  cmds_sfc_flow_classifier_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'9 b8 ~  y) l2 P) z5 w
  cmds_sfc_port='chain pair'
& m# X& M8 |/ K* x, N% _  cmds_sfc_port_chain='create delete list set show unset'  `7 A& V4 \$ v2 ^
  cmds_sfc_port_chain_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --description --flow-classifier --chain-parameters --port-pair-group'
( U5 |# r& C- I( o9 D. C2 }! q/ K  cmds_sfc_port_chain_delete='-h --help'# h: Q8 D- d# o
  cmds_sfc_port_chain_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --long'
( C; r0 M' j9 a  cmds_sfc_port_chain_set='-h --help --name --description --flow-classifier --no-flow-classifier --port-pair-group --no-port-pair-group'
/ q$ Q3 J# p7 }5 i  cmds_sfc_port_chain_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'/ X7 c3 W2 Q& S
  cmds_sfc_port_chain_unset='-h --help --flow-classifier --all-flow-classifier --port-pair-group'
2 ~& ~2 J! s, h/ K) ]& d  cmds_sfc_port_pair='create delete group list set show'
4 q" ^) @7 `/ j- F* ~  cmds_sfc_port_pair_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --description --service-function-parameters --ingress --egress'
3 t* x4 E, b. r; e- K  cmds_sfc_port_pair_delete='-h --help'
3 }% h4 g9 c4 c  Q  cmds_sfc_port_pair_group='create delete list set show unset'
. u* I% ^; b1 G! o( a2 i  cmds_sfc_port_pair_group_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --description --port-pair --enable-tap --disable-tap --port-pair-group-parameters', q) J' W  Z  R  d# I% j
  cmds_sfc_port_pair_group_delete='-h --help'6 A+ L- `; e, Q% F
  cmds_sfc_port_pair_group_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --long'3 {8 Q# V  U% P2 o( _2 w5 N, Y
  cmds_sfc_port_pair_group_set='-h --help --name --description --port-pair --no-port-pair'- W, v) ~" b& i- O# o
  cmds_sfc_port_pair_group_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix', I+ r, h" k- _7 S5 O
  cmds_sfc_port_pair_group_unset='-h --help --port-pair --all-port-pair'
$ F, i: \% L- R/ ]* x6 s  cmds_sfc_port_pair_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --long'
  `) Y5 Y1 Z  f# V" j8 V7 @: o3 O  cmds_sfc_port_pair_set='-h --help --name --description'0 j7 q& i* q5 h0 ^9 r  X
  cmds_sfc_port_pair_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'$ L) N% d: O2 C: [; a# {4 q
  cmds_sfc_service='graph'& n! ~- E- y' p- l
  cmds_sfc_service_graph='create delete list set show'
: Z# }) g, K" |3 Z$ K" b2 `* _  cmds_sfc_service_graph_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --description --branching-point'
# U" R1 y: K$ w0 Z  cmds_sfc_service_graph_delete='-h --help') b8 p" U4 Q) d3 j6 v# l( V" ~2 @0 g1 s
  cmds_sfc_service_graph_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --long'; @" Z( `4 F9 [: ~8 |1 F
  cmds_sfc_service_graph_set='-h --help --name --description') z# o6 I& y" }( h
  cmds_sfc_service_graph_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
: b4 G* X% r1 x, N; ^  cmds_subnet='create delete list pool set show unset'
, }1 f2 U, e1 h7 S! S7 c8 G  cmds_subnet_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --project --project-domain --subnet-pool --use-prefix-delegation --use-default-subnet-pool --prefix-length --subnet-range --dhcp --no-dhcp --dns-publish-fixed-ip --no-dns-publish-fixed-ip --gateway --ip-version --ipv6-ra-mode --ipv6-address-mode --network-segment --network --description --allocation-pool --dns-nameserver --host-route --service-type --tag --no-tag') O' @3 P7 J# f4 k- i8 R! H
  cmds_subnet_delete='-h --help'
' @. G! s% V: G  cmds_subnet_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --long --ip-version --dhcp --no-dhcp --service-type --project --project-domain --network --gateway --name --subnet-range --tags --any-tags --not-tags --not-any-tags'$ K. h+ z0 B4 ?  X& {
  cmds_subnet_pool='create delete list set show unset'# Z% d- L4 |" s
  cmds_subnet_pool_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --pool-prefix --default-prefix-length --min-prefix-length --max-prefix-length --project --project-domain --address-scope --default --no-default --share --no-share --description --default-quota --tag --no-tag'
8 {; V, \9 i% A  cmds_subnet_pool_delete='-h --help'
7 d( S- x) v+ _- W# o# p" f  cmds_subnet_pool_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --long --share --no-share --default --no-default --project --project-domain --name --address-scope --tags --any-tags --not-tags --not-any-tags'
0 C0 T" B1 }9 \$ d  cmds_subnet_pool_set='-h --help --name --pool-prefix --default-prefix-length --min-prefix-length --max-prefix-length --address-scope --no-address-scope --default --no-default --description --default-quota --tag --no-tag'
: T) l1 b- g) |, x  cmds_subnet_pool_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
% B; ~' Q$ y6 m9 Y- T4 M" j$ Y# t  cmds_subnet_pool_unset='-h --help --tag --all-tag'
! t/ R% }1 F$ w9 b  cmds_subnet_set='-h --help --name --dhcp --no-dhcp --dns-publish-fixed-ip --no-dns-publish-fixed-ip --gateway --network-segment --description --tag --no-tag --allocation-pool --no-allocation-pool --dns-nameserver --no-dns-nameservers --host-route --no-host-route --service-type'
5 ]% x4 `. d5 f4 S9 N  cmds_subnet_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
# j& W! m& C9 R' X; l* u! {) b  cmds_subnet_unset='-h --help --allocation-pool --dns-nameserver --host-route --service-type --tag --all-tag'3 k% L" o* F4 W3 A$ n- {8 G
  cmds_volume='backup create delete host list migrate qos service set show snapshot transfer type unset'
" f- D; r0 [" D$ e* x  cmds_volume_backup='create delete list restore set show'
+ |9 ], N% K, s$ o. P1 E9 {: d  cmds_volume_backup_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --name --description --container --snapshot --force --incremental'
7 S3 S/ T1 B) X5 e  cmds_volume_backup_delete='-h --help --force'
8 v9 c: ]) ?4 W3 V# s" P  cmds_volume_backup_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --long --name --status --volume --marker --limit --all-projects'
: I5 H1 T. g  [! z; ?) P  cmds_volume_backup_restore='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
# {4 o# \1 y3 ]) h+ m! q* w3 M  cmds_volume_backup_set='-h --help --name --description --state'
& }, F8 r; k+ M. r  cmds_volume_backup_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'5 b5 q4 O1 M' t( w) q/ }  c+ u
  cmds_volume_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --size --type --image --snapshot --source --source-replicated --description --availability-zone --consistency-group --property --hint --bootable --non-bootable --read-only --read-write'  m1 f" F1 ?. Q' y+ ^6 N  Q
  cmds_volume_delete='-h --help --force --purge'
7 a! Y; H9 S9 n  cmds_volume_host='set'# N7 L" `1 l( t1 k
  cmds_volume_host_set='-h --help --disable --enable'
4 }! X& E, o" K& M0 j, L  cmds_volume_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --project --project-domain --user --user-domain --name --status --all-projects --long --marker --limit'
2 a; p: q. h7 ~1 T2 W  cmds_volume_migrate='-h --help --host --force-host-copy --lock-volume'6 P7 l7 I5 ?5 z3 z& W( P' o+ W
  cmds_volume_qos='associate create delete disassociate list set show unset'
% I7 W; n) [# u: s  cmds_volume_qos_associate='-h --help'
# X9 R6 `0 K/ Q0 `, @9 [1 c5 }  cmds_volume_qos_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --consumer --property'* j1 Y5 o! ]( ~! Y- A; ~
  cmds_volume_qos_delete='-h --help --force'
! s4 F% {7 @& O1 n# [2 t; o& s9 Y  cmds_volume_qos_disassociate='-h --help --volume-type --all'
6 K# y: ]5 D) e% _  cmds_volume_qos_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column'7 t' l( O1 M8 l& ~2 ^
  cmds_volume_qos_set='-h --help --property'
7 c: f. ~* S) H6 ^6 `8 |9 K) O  cmds_volume_qos_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
9 ?! d/ z4 ^& U' u# h8 Q  cmds_volume_qos_unset='-h --help --property'
2 q1 i$ e" \7 P6 j  B* Q  cmds_volume_service='list set'& `" s3 s! s0 I7 d5 ^" l
  cmds_volume_service_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --host --service --long'1 n% Y: \. n/ `$ R$ B
  cmds_volume_service_set='-h --help --enable --disable --disable-reason'% r5 B7 X0 y2 m4 X- m6 K
  cmds_volume_set='-h --help --name --size --description --no-property --property --image-property --state --attached --detached --type --retype-policy --bootable --non-bootable --read-only --read-write'  k. @0 `; u/ J
  cmds_volume_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'( z& j- x. v) f& i
  cmds_volume_snapshot='create delete list set show unset'
; i9 o8 T5 t% B2 ?! I  cmds_volume_snapshot_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --volume --description --force --property --remote-source'7 z' \9 A8 A0 p2 O/ z  m
  cmds_volume_snapshot_delete='-h --help --force'- _) m+ I+ P9 @% M" o: k
  cmds_volume_snapshot_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --all-projects --project --project-domain --long --marker --limit --name --status --volume'+ R* `2 l* x+ Y2 F
  cmds_volume_snapshot_set='-h --help --name --description --no-property --property --state'
% M) I" [! v+ T3 J( N- O& L- n. _  cmds_volume_snapshot_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
4 ]( F  K6 C2 t6 L: x+ j  cmds_volume_snapshot_unset='-h --help --property'5 N! a. Z9 ]: {) i
  cmds_volume_transfer='request'/ j% |5 h# s: v' ~
  cmds_volume_transfer_request='accept create delete list show'
( h/ Q, k4 [. J% O$ q+ ]  y% Y  cmds_volume_transfer_request_accept='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --auth-key'
2 H( I* y; Q( M' {% Y) u. r  cmds_volume_transfer_request_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --name'
9 t- k8 C- `# D3 j* Q/ j/ Y  cmds_volume_transfer_request_delete='-h --help'6 Y' ?* y: p( x6 Z( k5 y
  cmds_volume_transfer_request_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --all-projects'+ u; ~& q# ]6 c8 j
  cmds_volume_transfer_request_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
. a/ f- H7 K/ k2 p- ~, _  cmds_volume_type='create delete list set show unset'* i- W/ c# r4 g1 P3 z
  cmds_volume_type_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --description --public --private --property --project --encryption-provider --encryption-cipher --encryption-key-size --encryption-control-location --project-domain'  o# Q" F/ |; U" r3 l
  cmds_volume_type_delete='-h --help'4 W, \6 @4 O; a3 C+ F. r/ n: g
  cmds_volume_type_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --long --default --public --private --encryption-type'
# X. @( d+ X2 @3 q  cmds_volume_type_set='-h --help --name --description --property --project --project-domain --encryption-provider --encryption-cipher --encryption-key-size --encryption-control-location'
: c- t! d9 \8 b7 T  cmds_volume_type_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --encryption-type': G8 b' b2 G. B0 {8 p
  cmds_volume_type_unset='-h --help --property --project --project-domain --encryption-type'
( Q( k8 T5 p0 u& L4 J& e# x9 s  cmds_volume_unset='-h --help --property --image-property'
4 }' h3 A3 ~2 O0 V  dash=-0 \! C0 L. ]% T0 b/ h% c0 [+ E% a3 [
  underscore=_
& u4 ?: V& x' U: X9 u( O  cmd=""
7 K: L4 k( U% D+ [# f  words[0]=""% S; F1 G; d9 X: U/ f9 `- t
  completed="${cmds}"
& U6 \4 C9 j* o" N* j, y" D  for var in "${words[@]:1}"( F: b8 [& ~, e' v; T
  do
! `! N/ f" S0 M- t4 |    if [[ ${var} == -* ]] ; then) I  K: {7 j2 e8 @
      break
+ U. p* k: c3 L. F* b    fi
0 X7 g1 h. F& t- y' k    if [ -z "${cmd}" ] ; then
$ _7 w9 ~# d, S( j9 M7 j% E      proposed="${var}"8 }( l* c+ b$ O1 L
    else
. I1 S6 n7 }. G      proposed="${cmd}_${var}"
5 ^* H) O2 T. o7 q- P    fi
. u) p& |) |, A3 x; u    local i="cmds_${proposed}"2 S" U& C& i5 F1 d# C" a3 |: H" i
    i=${i//$dash/$underscore}
! C' y; w5 K/ F7 }; ?7 ?5 f  I    local comp="${!i}") {% y7 p& {& c$ c" |
    if [ -z "${comp}" ] ; then
$ `' J7 E1 Z3 n) _& @0 B      break
" _$ w; g" S* x/ C3 Y2 @1 H    fi& m, j% |! @- z7 h1 i7 g. B0 [
    if [[ ${comp} == -* ]] ; then2 x' b2 _: P  J9 m; J
      if [[ ${cur} != -* ]] ; then% Y, s" S: J0 N: S2 s4 [
        completed=""" J( G0 @5 E8 `# ]: H6 z
        break, ~  @3 G* C- n7 G4 s
      fi( h8 H$ Z  p5 K9 z) A3 y
    fi. q9 n' ^+ d" s: ~
    cmd="${proposed}"* W; H. r+ r" o8 T, T4 r, s
    completed="${comp}"
& i' R# g1 ]7 L1 L! U0 @# p5 r  done. Y- F9 @& J* l1 b7 o! ^- J
  if [ -z "${completed}" ] ; then1 I! d  o! E/ D" L. [' p1 ~$ u
    COMPREPLY=( $( compgen -f -- "$cur" ) $( compgen -d -- "$cur" ) )% }# `) U! q/ @8 N; C- [/ j
  else
& y7 `# \2 q3 U+ Z9 N% L4 z    COMPREPLY=( $(compgen -W "${completed}" -- ${cur}) )
- ~: R% p+ U$ ]  fi7 Y0 N. R% _1 B) d+ \) R
  return 0
3 J2 d" D% T: W% o}1 d) h5 d5 A. _9 [* c
complete -F _nova nova
% ]8 D# `; v  Z4 x2 N, j: C
  I! `$ @. L8 s  i0 j- w9 o* @, G/ T( `& l% ]- w

$ N/ V( \* ]8 q/ f8 ^" u, P$ }保存退出后:0 a9 I9 D( a: p: L& M3 |. |
; k0 m, P$ _8 v1 Z
echo "source /etc/bash_completion.d/nova.bash_completion" >>~/.bashrc
+ V& S+ z6 H4 m4 J/ `1 |6 w1 w; l3 G# _3 [$ Y

4 e! j. j( K5 y( ?1 X然后加载bashrc的文件:
5 x+ i+ Z. a) Q7 T/ a. H' Y0 H[root@controller1 ~]# source ~/.bashrc0 l7 O/ p) k3 Q
$ {( @, ~; ]* i6 k2 ~
9 F& h  ~+ N+ @# I. r/ }; S

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2021-9-3 09:02:25 | 显示全部楼层
测试结果如下:
; c( F3 u) [; M# y# x[root@controller1 bash_completion.d]# nova
& X/ K6 ^8 k# X1 a, a# C; fDisplay all 160 possibilities? (y or n)
. n8 K/ x5 e2 _0 q; e; padd-secgroup                   flavor-access-remove           instance-action-list           --os-domain-id                 remove-secgroup                --service-type  K9 a) Y5 I, g# K
agent-create                   flavor-create                  instance-usage-audit-log       --os-domain-name               rescue                         set-password
4 f4 w/ C9 I  h5 A) L: f5 nagent-delete                   flavor-delete                  interface-attach               --os-endpoint-override         reset-network                  shelve
. }5 I3 G* Q+ w5 n% p7 n" ]agent-list                     flavor-key                     interface-detach               --os-endpoint-type             reset-state                    shelve-offload
- e- m- E6 L4 S" c' g6 sagent-modify                   flavor-list                    interface-list                 --os-key                       resize                         show) E* g1 D# R2 A. c4 E4 K
aggregate-add-host             flavor-show                    keypair-add                    --os-password                  resize-confirm                 ssh
6 B; @: s2 N7 }1 p4 b+ f0 j5 Yaggregate-cache-images         flavor-update                  keypair-delete                 --os-project-domain-id         resize-revert                  start
1 f7 Q! ~+ v; V) i) taggregate-create               force-delete                   keypair-list                   --os-project-domain-name       restore                        stop
$ D& j! j6 v  B6 E" I/ Maggregate-delete               get-mks-console                keypair-show                   --os-project-id                resume                         suspend( X( R: Z" \3 h
aggregate-list                 get-password                   limits                         --os-project-name              server-group-create            --timeout5 u% h2 d* G8 |2 r
aggregate-remove-host          get-rdp-console                list                           --os-region-name               server-group-delete            --timings! E) ~4 b* F( C( y
aggregate-set-metadata         get-serial-console             list-secgroup                  --os-system-scope              server-group-get               trigger-crash-dump
( \: i/ }; {1 O+ P) Q; |( Z' k" Z. K, maggregate-show                 get-spice-console              live-migration                 --os-trust-id                  server-group-list              unlock
  g* _+ q8 A3 s3 g! Z/ saggregate-update               get-vnc-console                live-migration-abort           --os-user-domain-id            server-migration-list          unpause' D& X4 B, Z, ^
availability-zone-list         help                           live-migration-force-complete  --os-user-domain-name          server-migration-show          unrescue6 }- U3 P9 g3 Q5 s, k4 k1 j
backup                         host-evacuate                  lock                           --os-user-id                   server-tag-add                 unshelve
4 z$ Y6 B$ d! _+ tbash-completion                host-evacuate-live             meta                           --os-username                  server-tag-delete              update
+ O9 p' [6 W) B# C+ E- O; W$ {boot                           host-meta                      migrate                        pause                          server-tag-delete-all          usage7 |0 b$ A8 a* w8 q
clear-password                 host-servers-migrate           migration-list                 quota-class-show               server-tag-list                usage-list4 v# Q- V) D* }$ d* L
--collect-timing               hypervisor-list                --os-auth-type                 quota-class-update             server-tag-set                 --version  @* ~" A  [# f% Y
console-log                    hypervisor-servers             --os-auth-url                  quota-defaults                 server-topology                version-list
0 \& t+ `5 H1 f, g6 v% \--debug                        hypervisor-show                --os-cacert                    quota-delete                   service-delete                 volume-attach; q! v7 {' ^* O: \$ P; Z
delete                         hypervisor-stats               --os-cache                     quota-show                     service-disable                volume-attachments: p7 I- Z7 M) V) f; E
diagnostics                    hypervisor-uptime              --os-cert                      quota-update                   service-enable                 volume-detach2 }3 I4 P+ H9 H
evacuate                       image-create                   --os-compute-api-version       reboot                         service-force-down             volume-update
/ P$ C) b- a( R0 Sflavor-access-add              --insecure                     --os-default-domain-id         rebuild                        service-list                   3 m7 Y# ^& m. K* y; G) S0 d  m
flavor-access-list             instance-action                --os-default-domain-name       refresh-network                --service-name                 5 L" m' j% }/ @( j

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2021-9-8 16:14:41 | 显示全部楼层
经过精简的版本:
% s$ i+ S! p. W4 [( jcat nova.bash_completion , D7 h0 S2 g9 {8 ^
_nova()% R# W1 T( l% V& k% n# O$ p; ]
{
& Y& ]+ @- O' b0 y0 b, `   local cur prev words' R* ]/ G9 a$ D( r0 U
   COMPREPLY=()7 _  J" `: |$ }; {5 ]0 }# G2 N
   _get_comp_words_by_ref -n : cur prev words; A/ M% Y6 G4 N9 w
   # Command data:1 o0 S" ]2 l% f# j1 J4 B4 M
   cmds='add-secgroup agent-create agent-delete agent-list agent-modify aggregate-add-host aggregate-cache-images aggregate-create aggregate-delete aggregate-list aggregate-remove-host aggregate-set-metadata aggregate-show aggregate-update availability-zone-list backup boot clear-password console-log delete diagnostics evacuate flavor-access-add flavor-access-list flavor-access-remove flavor-create flavor-delete flavor-key flavor-list flavor-show flavor-update force-delete get-mks-console get-password get-rdp-console get-serial-console get-spice-console get-vnc-console host-evacuate host-evacuate-live host-meta host-servers-migrate hypervisor-list hypervisor-servers hypervisor-show hypervisor-stats hypervisor-uptime image-create instance-action instance-action-list instance-usage-audit-log interface-attach interface-detach interface-list keypair-add keypair-delete keypair-list keypair-show limits list list-secgroup live-migration live-migration-abort live-migration-force-complete lock meta migrate migration-list pause quota-class-show quota-class-update quota-defaults quota-delete quota-show quota-update reboot rebuild refresh-network remove-secgroup rescue reset-network reset-state resize resize-confirm resize-revert restore resume server-group-create server-group-delete server-group-get server-group-list server-migration-list server-migration-show server-tag-add server-tag-delete server-tag-delete-all server-tag-list server-tag-set server-topology service-delete service-disable service-enable service-force-down service-list set-password shelve shelve-offload show ssh start stop suspend trigger-crash-dump unlock unpause unrescue unshelve update usage usage-list version-list volume-attach volume-attachments volume-detach volume-update bash-completion help --version --debug --os-cache --timings --os-region-name --service-type --service-name --os-endpoint-type --os-compute-api-version --os-endpoint-override --os-auth-type --insecure --os-cacert --os-cert --os-key --timeout --collect-timing --os-auth-url --os-system-scope --os-domain-id --os-domain-name --os-project-id --os-project-name --os-project-domain-id --os-project-domain-name --os-trust-id --os-default-domain-id --os-default-domain-name --os-user-id --os-username --os-user-domain-id --os-user-domain-name --os-password'
# T4 p: W% w$ |" L& C  dash=-
/ ]/ T+ z! B+ w, e  underscore=_
  i/ ^0 l5 E$ u7 h/ Q* s) [# A   cmd=""
3 c+ o. {7 i% H   words[0]=""2 C$ n1 `: Q& \! o" E
   completed="${cmds}"# A, f& A* i' {, D# m
   for var in "${words[@]:1}"
7 y  q- ^) h: Y1 H! i% L0 K   do( M+ s1 F& S! z- c' R, k: n
     if [[ ${var} == -* ]] ; then2 ~$ G# m; H5 q7 Q4 a
       break. K) U' w3 p0 H- E1 A
     fi$ e5 I% @+ \. l( Z* v( \& A' _
     if [ -z "${cmd}" ] ; then
- Z$ F6 ]# U5 ?' l4 O* V; p. s) |       proposed="${var}"$ u8 ?7 t8 ]* d7 I
     else
* A1 ]# W9 Q# M- T       proposed="${cmd}_${var}". v" ]* C1 W4 m9 j( U0 R
     fi
; y7 ^7 w% s" N5 \: @     local i="cmds_${proposed}", q  s& x% R# s, K+ ~
     i=${i//$dash/$underscore}
! @9 N( p& ?; r2 ?     local comp="${!i}"
, c2 a+ Q% v2 z     if [ -z "${comp}" ] ; then4 J& v5 t- C) ^
       break2 G6 g; a" [* k: s2 m/ v. ~. B' @
     fi/ _8 R& b" Y# B1 v9 t5 ]
     if [[ ${comp} == -* ]] ; then
$ D" Q! e1 A- q: _       if [[ ${cur} != -* ]] ; then
- S! x+ V; C: d3 `         completed=""
. V/ S( h+ V% R6 x% R( d0 s         break6 D# H: U0 l: h5 O/ {
       fi
2 Z2 ^( B. C2 q% h& ?     fi3 f- Y/ b$ C4 |& [& O4 J
     cmd="${proposed}"7 r- h" u$ L3 m
     completed="${comp}"0 A9 g5 R3 ]+ U1 h
   done
8 P( ?7 N2 H/ R# d+ s5 N   if [ -z "${completed}" ] ; then
, d) E% h( K% J) {) I% [     COMPREPLY=( $( compgen -f -- "$cur" ) $( compgen -d -- "$cur" ) )
8 O0 ?) \  I* ]2 c9 @# {/ Y   else% d' L( ^+ e2 D1 o: E
     COMPREPLY=( $(compgen -W "${completed}" -- ${cur}) )" @6 L0 c, f0 [: [# t
   fi
1 I  K3 J5 Q2 ~3 V6 a   return 07 B$ q/ U6 e  a1 }' J( n
}
' `' V& r: W  e* f: J6 D) ? complete -F _nova nova2 T! A( ^, a5 _& l
  y4 }9 N# b" |  @. r( L3 o4 A
; M; ~/ ?! r5 V& `

$ d( S  K( O. |4 |加入到/etc/proflie文件中,所有的用户都可以tab补全。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 02:22 , Processed in 0.018617 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表