将设为首页浏览此站
开启辅助访问 天气与日历 收藏本站联系我们切换到窄版

易陆发现论坛

 找回密码
 开始注册
查看: 260|回复: 2
收起左侧

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

[复制链接]
发表于 2021-9-3 09:01:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?开始注册

x
为了让nova 命令可以补全,因为有些时候,命令可能记不住,可以尝试使用此方法设置,当然自己开发的环境可能就自带:
' y: `/ h: `( t" M9 N; S) D切换到/etc/bash_completion.d目录下:% q7 I* N0 U3 C' E4 w9 j0 `5 o

" Q" m, b# ^, p3 h) K创建文件vim  nova.bash_completion % G( X( V& o0 O; i1 d4 z
! [: d0 y4 W" _3 B% W1 \8 ~7 @% {
( P3 n. |; y3 m  n+ p1 Q1 ~# C
_nova()( f* C( h' E  A' }! b
{9 R; U* D) c4 ~5 `0 E
  local cur prev words
# Y: g* Q: y; L0 Y2 k1 s' W  COMPREPLY=()8 I, }0 w; P. s8 k4 \% r5 Y8 v' V9 z
  _get_comp_words_by_ref -n : cur prev words9 `+ E7 r+ d6 G- V* k3 X
  # Command data:4 `" I. _6 B2 C. M7 Z3 n
  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'
, n# z) p1 b  F8 k% j! R: ?  cmds_flavor='create delete list set show unset'0 j' c* H2 c7 v* T* X( z: e9 V" E
  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'; _* e3 P/ O( S5 q4 ^
  cmds_flavor_delete='-h --help'4 Y% o8 E& u0 h4 Z8 c2 \8 m5 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'5 r3 q9 n' N5 r" p
  cmds_flavor_set='-h --help --no-property --property --project --description --project-domain'+ K8 |4 z+ F& Q" b$ b  S
  cmds_flavor_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
7 S0 K7 u. {3 p  cmds_flavor_unset='-h --help --property --project --project-domain'/ P5 ?- c, F, X6 w1 M8 S
  cmds_floating='ip'' j9 R6 m; x' y) r. ^. {% c9 P8 y
  cmds_floating_ip='create delete list pool port set show unset'1 r7 Y) o; A  e( k+ `) a" R
  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'
) T, @" ~. k" W/ _/ h- p- p  cmds_floating_ip_delete='-h --help'
$ l8 F; K1 \2 i, T' Q% W  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'* N; c& q/ e* R+ P0 E
  cmds_floating_ip_pool='list'2 w& }) K1 Y( c# j! s( M
  cmds_floating_ip_pool_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column'" u7 n- ^3 _7 _+ Z# D- P
  cmds_floating_ip_port='forwarding'$ Q5 Z+ u, s4 v5 A( W$ \$ \0 F! v
  cmds_floating_ip_port_forwarding='create delete list set show'
. K8 F& b$ X; ^/ q. ^  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'( v+ Y1 S% \$ J/ q1 B) J
  cmds_floating_ip_port_forwarding_delete='-h --help'
) T6 R( Y6 U" \  h: N4 |  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'1 B# m# }2 T% Q! l# g4 {3 D( B
  cmds_floating_ip_port_forwarding_set='-h --help --port --internal-ip-address --internal-protocol-port --external-protocol-port --protocol'
- f0 v; P4 K/ J  cmds_floating_ip_port_forwarding_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix', S7 N/ h  f. m
  cmds_floating_ip_set='-h --help --port --fixed-ip-address --description --qos-policy --no-qos-policy --tag --no-tag'
6 F, ^& Y8 N  D6 k, ~% G+ c  cmds_floating_ip_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
' \  j$ l) W' ]# _, F  cmds_floating_ip_unset='-h --help --port --qos-policy --tag --all-tag'* M% a% e/ R. ^! e$ P
  cmds_hypervisor='list show stats'2 I2 a3 a  E) U/ l) d
  cmds_hypervisor_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --matching --long'
2 U- Y, x, t8 }6 i% z$ J( N  cmds_hypervisor_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
0 I6 C6 P* I' L  cmds_hypervisor_stats='show'
# L! v& n% c3 m: {" N5 \* [- G  cmds_hypervisor_stats_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
- S( I/ W1 M: N, z) h! k' W  cmds_image='add create delete list member remove save set show unset'# t1 _  p% e$ \$ U
  cmds_image_add='project'! k& l& I  f% I+ c, }0 b+ D* K
  cmds_image_add_project='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --project-domain'
1 @" u9 l% Z0 I9 r, {" R" p  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'
! s7 K" V' r/ F, W6 Q  K, z  cmds_image_delete='-h --help'
. Y1 F8 _0 y0 g- L5 j  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': s4 i# \0 F8 S, L' }& k
  cmds_image_member='list'; H7 x( a) j( n; M
  cmds_image_member_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --project-domain'% L; K1 x; S- S: x; c
  cmds_image_remove='project'
$ i" D9 N, U) G' z: Y4 h/ J. b4 o- \  cmds_image_remove_project='-h --help --project-domain'" A, v6 g! b( a/ [' z
  cmds_image_save='-h --help --file'
* L0 O  S& Y; k. N# Z" J4 ^  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'
3 B" _3 P7 K7 }8 d2 t  cmds_image_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --human-readable'& v. J8 G$ _9 @6 F% x, ^5 h% x
  cmds_image_unset='-h --help --tag --property'
) ]7 i6 k8 V8 E" d  cmds_server_delete='-h --help --wait'! v! }' s& p! X' t- \' a% p
  cmds_server_dump='create'+ b7 Q. ^/ g. h$ R" L7 C
  cmds_server_dump_create='-h --help'
3 a8 y& I/ m0 u% N( m1 v$ b/ y2 X  cmds_server_event='list show'7 h$ I, c  Q+ o  s& H$ z8 y
  cmds_server_event_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --long'9 q# ?, ^9 g+ _/ Y& O: E8 w! H
  cmds_server_event_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'% Z' G% p: c% d- F" z/ `9 `
  cmds_server_group='create delete list show'1 J: b, S0 b- A
  cmds_server_group_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --policy'- m" h/ q0 n4 k2 c! s/ H: r: f
  cmds_server_group_delete='-h --help'- ~4 c: B* u/ {3 W* `0 l
  cmds_server_group_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --all-projects --long'& U6 {% Z" U7 I9 Q# e1 H; {, j! B' X+ N
  cmds_server_group_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
0 `0 j0 K- `: x5 q  {2 X/ w! F  cmds_server_image='create'
/ G9 v8 u8 h3 N" F9 Y6 u( X9 C0 r  cmds_server_image_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --name --wait'7 w* T8 i1 B; a) R+ d0 }
  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'' |8 I% m2 m+ \- O* [1 p+ U' ~
  cmds_server_lock='-h --help --reason'$ {# T" ~& `% C9 c' O
  cmds_server_migrate='-h --help --live-migration --live --host --shared-migration --block-migration --disk-overcommit --no-disk-overcommit --wait'
! M3 s3 Z* A4 q% u  A" c  cmds_server_pause='-h --help'
; e, a2 S) \# O  cmds_server_reboot='-h --help --hard --soft --wait'
. k, E& _/ f7 u# k  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'/ `$ F9 k# u, \( r& G- @0 E
  cmds_server_remove='fixed floating network port security volume'
/ _+ ]- P" b% _5 ]4 @# H6 x  cmds_server_remove_fixed='ip'4 A9 W& D5 |- r' H6 q0 c# J3 j3 N( {
  cmds_server_remove_fixed_ip='-h --help'
2 L0 ~3 B3 y; |  cmds_server_remove_floating='ip'4 h% j: G; `3 q9 [, L# w
  cmds_server_remove_floating_ip='-h --help'6 D4 r& l/ h7 Q
  cmds_server_remove_network='-h --help'
. p% H  J- c& o4 p5 }* {  cmds_server_remove_port='-h --help'' }9 B2 K; M. v& r% c+ i- F; ^
  cmds_server_remove_security='group'
) i- |' |7 A) D  cmds_server_remove_security_group='-h --help'
, m- s' G0 h9 A( H7 m: [  cmds_server_remove_volume='-h --help'
% Q0 ^8 N2 t" V9 a0 _8 }7 o9 m  cmds_server_rescue='-h --help --image --password'/ F0 H& |1 u& v  Q
  cmds_server_resize='-h --help --flavor --confirm --revert --wait revert confirm'+ @4 Z, C' ?. ^( p+ x5 y9 C2 Q
  cmds_server_resize_confirm='-h --help'
4 h* X) N. h; Q$ O, Z  cmds_server_resize_revert='-h --help'' h$ b( B* `1 [3 O
  cmds_server_restore='-h --help'+ r; o. o# Z) ?+ V1 D6 Q
  cmds_server_resume='-h --help'
0 V2 K# E- N& ^; m/ c' N1 k  cmds_server_set='-h --help --name --root-password --property --state --description', u6 ?6 H) k2 `/ R$ J: ]5 Q
  cmds_server_shelve='-h --help'
- m% }) `' L2 p' q  cmds_server_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --diagnostics'
2 I+ A7 b: F6 r1 I5 M. [4 w+ [5 i/ Q  cmds_server_ssh='-h --help --login -l --port -p --identity -i --option -o -4 -6 --public --private --address-type -v'
" J' d7 y8 i6 R$ g* F+ Z  cmds_server_start='-h --help'
1 ]2 _) Y. D% O  cmds_server_stop='-h --help'
" `( f3 P- w  @8 Q( ~  cmds_server_suspend='-h --help'; J4 b$ ]8 \" N7 H9 ]! D- c
  cmds_server_unlock='-h --help'
7 s6 e7 b0 h2 a7 H4 D  cmds_server_unpause='-h --help'
2 D  H% f+ o% f4 u8 X  cmds_server_unrescue='-h --help'
  A( i* s8 U; |6 {3 ]8 g  cmds_server_unset='-h --help --property --description'3 R7 b' E' r/ I( g( S$ w
  cmds_server_unshelve='-h --help --availability-zone'
7 W& |' ^$ v+ g# i8 k; H. h, o  cmds_service='create delete list provider set show'
. F9 H: L" o% c% U  cmds_service_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --name --description --enable --disable'
! B5 }7 [5 `3 b0 G0 w  cmds_service_delete='-h --help'
  B( M2 a! K4 S  cmds_service_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --long': d" z! m- A" Z/ r9 n) C; m8 q5 G
  cmds_service_provider='create delete list set show'
) R, S4 `' |9 w! W# Y  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'6 J' S  ^- a) l8 F0 A, R
  cmds_service_provider_delete='-h --help'
- y$ i) A. X/ c0 t* f) Z& ~+ b  cmds_service_provider_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column'$ e: ]5 w7 @4 ]% [* E+ g% |
  cmds_service_provider_set='-h --help --auth-url --description --service-provider-url --enable --disable'
1 v" I% k8 D3 r/ F/ p7 ~! t* e  cmds_service_provider_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'" [0 p/ R& B+ U2 H1 _6 K
  cmds_service_set='-h --help --type --name --description --enable --disable'
  _: D1 S& z, J4 A0 g/ E  cmds_service_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'+ i) l% q  A5 L3 v( n/ k( x
  cmds_sfc='flow port service'( X' }! N$ }0 y% V2 y
  cmds_sfc_flow='classifier'7 S& U  R! Q+ K- t4 m
  cmds_sfc_flow_classifier='create delete list set show'$ r8 ?+ Q+ n* Q6 t( w: \
  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'+ E: N& E/ f8 |4 f, [" a+ P7 Q8 ~
  cmds_sfc_flow_classifier_delete='-h --help'
" U/ h1 N- {6 u  F  cmds_sfc_flow_classifier_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --long'
: \6 ^* l- S: p, x3 b/ I; U# b  cmds_sfc_flow_classifier_set='-h --help --name --description'
5 u* N9 E1 K7 I; B7 k/ Q7 x  cmds_sfc_flow_classifier_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'" x8 e9 g! [7 j1 ]- ?) p
  cmds_sfc_port='chain pair'
) J$ u* A3 m) `8 B6 i  cmds_sfc_port_chain='create delete list set show unset'
: A3 _# _/ e2 u! L& l4 p3 c  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'
# y9 J# `; `6 K2 B  ]  cmds_sfc_port_chain_delete='-h --help'' Z9 K/ X1 d" p) {% @0 Z0 I
  cmds_sfc_port_chain_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --long': T7 M; Q% L& X8 J
  cmds_sfc_port_chain_set='-h --help --name --description --flow-classifier --no-flow-classifier --port-pair-group --no-port-pair-group'
  R4 B3 T6 y; {  cmds_sfc_port_chain_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
. y5 t+ I1 V6 _/ I$ I  cmds_sfc_port_chain_unset='-h --help --flow-classifier --all-flow-classifier --port-pair-group'
: I$ G2 a* N& f4 [. T  cmds_sfc_port_pair='create delete group list set show'  B$ `1 D7 M4 S8 N& b7 o2 P
  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'
1 B' X( r$ A- d. Q+ p) w# z" ]  cmds_sfc_port_pair_delete='-h --help'
. Y# Q, A1 ^1 r0 Q- H. Q7 s- b  cmds_sfc_port_pair_group='create delete list set show unset'5 P( ?3 o% Y2 |9 z4 Z! p
  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'
! H% H+ d2 K1 Z# _  cmds_sfc_port_pair_group_delete='-h --help'
2 j: D! A( C6 J. s6 C4 b9 [3 B  cmds_sfc_port_pair_group_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --long'
; l, D- T& S+ h- J3 U1 I* _# s  cmds_sfc_port_pair_group_set='-h --help --name --description --port-pair --no-port-pair'
0 \9 c0 P4 E8 D; Q  F. }  cmds_sfc_port_pair_group_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'% M& P& m/ Z( }" [: f! b3 {9 j. v
  cmds_sfc_port_pair_group_unset='-h --help --port-pair --all-port-pair'
; @. R* O# J1 l! ~7 C  cmds_sfc_port_pair_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --long'& y0 o2 C% ^; S3 E) h, z/ M3 E
  cmds_sfc_port_pair_set='-h --help --name --description'8 U, t; W3 m2 T) w
  cmds_sfc_port_pair_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
  p) {8 `: b+ Q* \( f& O  cmds_sfc_service='graph'
7 l& X! @% t6 y  cmds_sfc_service_graph='create delete list set show'
5 H. d: K" E0 t1 m$ K  ]  cmds_sfc_service_graph_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --description --branching-point'3 T0 O/ G, e& ?  m
  cmds_sfc_service_graph_delete='-h --help'
9 j5 W  J- D# Z, G" k  cmds_sfc_service_graph_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --long'
" E( j% Y' m$ N7 j+ g. M6 W( Y  cmds_sfc_service_graph_set='-h --help --name --description'6 Z) D- P4 n: t  Q; l- x
  cmds_sfc_service_graph_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
8 A, m( O# \" U' e  cmds_subnet='create delete list pool set show unset'
. w. _3 p- }# W  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'
: e  \- t4 U. H: [: ~& j0 A" v  cmds_subnet_delete='-h --help'
; ]4 _- ^- V+ q. `0 _  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'
+ T* K$ I$ ~7 f1 E/ u  cmds_subnet_pool='create delete list set show unset'
* e& D3 c: t& K; [  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'; c% t: Z% B5 x* E
  cmds_subnet_pool_delete='-h --help') j0 z# @* x2 b+ j) o0 R* Y4 z
  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'
& g0 h! @" m( q7 d  R  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'
' X7 `' n+ t8 T0 A4 Z5 ~  cmds_subnet_pool_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'8 h* A+ ~* t+ G# Z8 `: v
  cmds_subnet_pool_unset='-h --help --tag --all-tag'
0 ~7 q5 b5 V* D! {: ^" e2 o  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'& v& A, Z1 X9 `5 g: \: i. n+ s1 G
  cmds_subnet_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
7 S& D- Q7 H, D, Q  c  cmds_subnet_unset='-h --help --allocation-pool --dns-nameserver --host-route --service-type --tag --all-tag'
. F' g4 _5 R' e% D  cmds_volume='backup create delete host list migrate qos service set show snapshot transfer type unset'+ J' F% h- y: t# s! Z
  cmds_volume_backup='create delete list restore set show'
) ?) E6 f7 v3 P% B0 d) b( g0 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'
8 J( J& O2 I3 z" [) ^! a6 W  cmds_volume_backup_delete='-h --help --force'
( k5 h" L; c  f9 ]  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'. @6 v$ ~3 \" B& p$ \1 v
  cmds_volume_backup_restore='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'2 g) c, s( l2 \9 O* w
  cmds_volume_backup_set='-h --help --name --description --state'( \4 S( A. n6 w& g& _3 a: }: k
  cmds_volume_backup_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'/ r) D6 v8 i( d4 U+ O
  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'6 y4 t# Z# m7 {+ o* g( S( F) [
  cmds_volume_delete='-h --help --force --purge'. ~2 \* @" a9 a. |$ ^2 i
  cmds_volume_host='set'
7 m: r2 @- L: r/ Q# P7 @) ^  cmds_volume_host_set='-h --help --disable --enable'
2 E1 s( Y1 i2 j( Z; L3 p8 a  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'4 T5 p: N8 S( r3 E# ]  N; b
  cmds_volume_migrate='-h --help --host --force-host-copy --lock-volume'/ u" g* T$ q2 S- @$ }! b0 a, N
  cmds_volume_qos='associate create delete disassociate list set show unset'
( W; `+ H! y( l$ O  ^  cmds_volume_qos_associate='-h --help'+ V+ t, ]" Q4 k& }* T0 e2 C
  cmds_volume_qos_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --consumer --property'
9 m2 ]' h, N3 g: u- a  cmds_volume_qos_delete='-h --help --force'5 ]8 d: V& ?1 O$ ]' s
  cmds_volume_qos_disassociate='-h --help --volume-type --all'
) `! U! U! E9 {. Q1 C9 X  cmds_volume_qos_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column'
9 R* |) s8 ?/ Y$ [/ l  S3 l  C; }  cmds_volume_qos_set='-h --help --property'( ?5 E* [2 b# G9 Z1 M
  cmds_volume_qos_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'; e6 z$ ?6 `7 C4 R$ _# D: h; L4 B* f
  cmds_volume_qos_unset='-h --help --property'
+ K* l/ n. i. b) Z  cmds_volume_service='list set'
+ v" S$ j. A; H* W7 o# f( u  cmds_volume_service_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --host --service --long'$ O+ s5 f. t( R, B  W
  cmds_volume_service_set='-h --help --enable --disable --disable-reason'
. ?* q, \! K) I  i+ H8 k4 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'
1 p  S+ J5 l! W7 U  V- t  cmds_volume_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
$ x4 q! s) L' W* K- W! V  cmds_volume_snapshot='create delete list set show unset'
$ _% {6 h% g# {2 A8 J0 S  e) v  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'
( M  t# G# F9 H( B8 y  cmds_volume_snapshot_delete='-h --help --force'
0 S: T3 Z2 w; r5 `  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', F4 N/ m7 R4 O0 Y7 ?0 g
  cmds_volume_snapshot_set='-h --help --name --description --no-property --property --state'
. p) `3 z7 T( r9 K" `  cmds_volume_snapshot_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'  W% @1 C4 Y2 T8 o2 V/ q+ ^5 O
  cmds_volume_snapshot_unset='-h --help --property'
2 I# h( [2 H7 J" z3 x3 R  cmds_volume_transfer='request'( z2 Z  j8 l6 l  o
  cmds_volume_transfer_request='accept create delete list show', ?8 D# ^/ P5 p) {) U. b3 o: Z+ {
  cmds_volume_transfer_request_accept='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --auth-key'4 I' _3 i" \  R" p
  cmds_volume_transfer_request_create='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --name': U$ d& Y9 D( i2 ]' O9 R0 B# G
  cmds_volume_transfer_request_delete='-h --help'8 f* H# q) ?3 s$ i  F
  cmds_volume_transfer_request_list='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --quote --sort-column --all-projects'
$ S( p3 `2 R7 G4 q& l  cmds_volume_transfer_request_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix'
0 F; S, y& h4 O. L- w  cmds_volume_type='create delete list set show unset'
# U4 K: n1 M3 I" j) U5 z( _, i) {% w  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'
" C% N: ?6 A4 w1 o1 X1 F  cmds_volume_type_delete='-h --help'
" m$ Y; x, `6 H) Z9 J9 i  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'
6 D* R: m  U' P; y; W: e  cmds_volume_type_set='-h --help --name --description --property --project --project-domain --encryption-provider --encryption-cipher --encryption-key-size --encryption-control-location'
: u) u4 Y, g, f3 s* v* m  cmds_volume_type_show='-h --help -f --format -c --column --max-width --fit-width --print-empty --noindent --variable --prefix --encryption-type'
( k& I' `, O& ~  cmds_volume_type_unset='-h --help --property --project --project-domain --encryption-type'+ S) ~& o! l3 z9 i0 X! \' y
  cmds_volume_unset='-h --help --property --image-property'( F* s8 M2 t4 [: Z
  dash=-
5 H1 X1 q6 p5 l* ~5 [7 A' R  underscore=_
% ~+ `6 j+ _$ Y/ F+ n5 t  cmd=""
5 k# w% P1 y) P/ L8 d9 R% N  words[0]=""
2 o9 Y4 ~$ P. r8 D' `7 w  completed="${cmds}". E# ~+ Y1 f& f& S' @. A6 N/ d
  for var in "${words[@]:1}"* r% F# F4 m1 \2 j" Y
  do  G- j7 t+ V& W- o6 O
    if [[ ${var} == -* ]] ; then
8 z" S$ @  Z, M, W6 n      break; Z0 c, f2 {+ v
    fi1 R& i+ ~  }! \/ P) [6 }0 R
    if [ -z "${cmd}" ] ; then) |1 {! e, E2 P+ L) @  _4 u. t
      proposed="${var}": x8 r  M. I: e' ?9 V9 L
    else
5 O4 q5 Y0 z+ x2 K      proposed="${cmd}_${var}"# R& u4 z$ h+ K: i
    fi
7 `7 t3 ^+ D7 ?8 G& s    local i="cmds_${proposed}"
8 }% ~$ l1 N2 y0 d: H" ^0 R    i=${i//$dash/$underscore}
6 @$ f% c# s0 W& |, {9 a" o8 {    local comp="${!i}"
) o) w' x- w7 A" U1 p: ~0 u9 K, a    if [ -z "${comp}" ] ; then
& O" V3 w( u; Q0 d% v! k      break
9 R$ k3 O! b7 q3 I1 ~9 \3 Q' P  J    fi
7 m+ g6 p+ Z6 A5 C+ v    if [[ ${comp} == -* ]] ; then
) |, r$ A* e7 X      if [[ ${cur} != -* ]] ; then
7 [! y- n2 R" s8 _        completed=""' n. T8 s6 E3 B: y% p4 d2 R/ W
        break: o" V3 C  x0 d
      fi
* |9 l4 k! z$ m" |5 F8 \    fi
( [) p8 }4 B' I% ~" |/ D8 ]    cmd="${proposed}"
8 N; J; y' i# X* g6 z# L    completed="${comp}"
- ]5 G6 {! E2 F0 V  y. {8 U$ s* }  done
2 C8 E* A  p! _# s9 G  V* F" y  if [ -z "${completed}" ] ; then
* k5 ^. R; r6 b6 G9 a$ F    COMPREPLY=( $( compgen -f -- "$cur" ) $( compgen -d -- "$cur" ) )) W$ x# r+ E7 q" R
  else
7 y, e1 r" F3 ^- i. W6 l& y    COMPREPLY=( $(compgen -W "${completed}" -- ${cur}) )  a% D; K- ^; |0 Q2 ~" W  r
  fi: T( F- L; U5 T4 Z
  return 0
9 p. B# C; C* g}- L( Y* ~6 e0 w% d+ d: |7 Z; i
complete -F _nova nova
0 Z7 N) W# i. h4 ]" A- ]" O3 D( G* b
7 b% W/ L( U( G/ h$ U$ C: ?/ C8 {; l* [% B4 p

1 W% S1 _7 x6 h" ^$ }) ?, v保存退出后:, q% T2 }% ?7 d5 g
. `% R) j2 y9 m8 }
echo "source /etc/bash_completion.d/nova.bash_completion" >>~/.bashrc
, T5 P3 R" ?* V! X  a- ^3 a% ^( T1 ~5 I

7 X; a: z. V: V6 a9 g4 {然后加载bashrc的文件:' L: j' B. W9 u7 e2 h; h0 T
[root@controller1 ~]# source ~/.bashrc
, e4 Z) O, X" b0 b- Y$ V; I- a3 T5 G( V, i$ V% ?8 P2 k5 K
9 O9 E. |! [  Q  g5 g& ^
 楼主| 发表于 2021-9-3 09:02:25 | 显示全部楼层
测试结果如下:
! |# g3 @, H* @% L2 Z: o! Z# d[root@controller1 bash_completion.d]# nova , {9 i0 X7 ]% w3 Y) `3 |
Display all 160 possibilities? (y or n)* X+ |  f% [5 v0 s6 }" ^  I0 K& \' K
add-secgroup                   flavor-access-remove           instance-action-list           --os-domain-id                 remove-secgroup                --service-type$ ]8 x' C+ o5 i0 P: u
agent-create                   flavor-create                  instance-usage-audit-log       --os-domain-name               rescue                         set-password" P% Y8 D$ H( @# |+ R
agent-delete                   flavor-delete                  interface-attach               --os-endpoint-override         reset-network                  shelve
  F6 q+ E3 L! Eagent-list                     flavor-key                     interface-detach               --os-endpoint-type             reset-state                    shelve-offload9 Q- P; f9 p+ L! c  Q2 c( U
agent-modify                   flavor-list                    interface-list                 --os-key                       resize                         show2 `) _  k( D0 v
aggregate-add-host             flavor-show                    keypair-add                    --os-password                  resize-confirm                 ssh* S0 R9 k% |, N1 l# i
aggregate-cache-images         flavor-update                  keypair-delete                 --os-project-domain-id         resize-revert                  start
8 H8 O0 t" b1 `7 Oaggregate-create               force-delete                   keypair-list                   --os-project-domain-name       restore                        stop
  Q4 {) c/ e! U7 k4 Y9 `$ h* H  s6 Y. Gaggregate-delete               get-mks-console                keypair-show                   --os-project-id                resume                         suspend
2 R- Q- `- x* R2 l# {8 T& Laggregate-list                 get-password                   limits                         --os-project-name              server-group-create            --timeout
4 H. I  E4 I0 N, ], A8 Faggregate-remove-host          get-rdp-console                list                           --os-region-name               server-group-delete            --timings
) ]  d. ?# f9 D6 paggregate-set-metadata         get-serial-console             list-secgroup                  --os-system-scope              server-group-get               trigger-crash-dump
% p& m. N$ q$ H0 ~! ^1 r, k2 D* D1 Eaggregate-show                 get-spice-console              live-migration                 --os-trust-id                  server-group-list              unlock7 A' Y( p! c  ]7 A
aggregate-update               get-vnc-console                live-migration-abort           --os-user-domain-id            server-migration-list          unpause
$ T: \+ p; Z8 o( Bavailability-zone-list         help                           live-migration-force-complete  --os-user-domain-name          server-migration-show          unrescue
, p: q; t$ i# b, lbackup                         host-evacuate                  lock                           --os-user-id                   server-tag-add                 unshelve/ r6 e- x6 b" t
bash-completion                host-evacuate-live             meta                           --os-username                  server-tag-delete              update
# A- M4 S( u( \* T5 y  s: X/ m7 X, F! uboot                           host-meta                      migrate                        pause                          server-tag-delete-all          usage4 O3 I& `# {8 ]
clear-password                 host-servers-migrate           migration-list                 quota-class-show               server-tag-list                usage-list
8 _9 h% e2 U% g4 g--collect-timing               hypervisor-list                --os-auth-type                 quota-class-update             server-tag-set                 --version" ]- i4 Z# C) S- p4 s
console-log                    hypervisor-servers             --os-auth-url                  quota-defaults                 server-topology                version-list4 x' V; _) R. S" {* S; g
--debug                        hypervisor-show                --os-cacert                    quota-delete                   service-delete                 volume-attach
- C! u! l0 G& l6 y+ Cdelete                         hypervisor-stats               --os-cache                     quota-show                     service-disable                volume-attachments
; T: H; ^5 L, ?( w" a* ]5 ~$ Qdiagnostics                    hypervisor-uptime              --os-cert                      quota-update                   service-enable                 volume-detach
+ U9 o: T  T9 Q- T8 P: A; o1 y' A" c) eevacuate                       image-create                   --os-compute-api-version       reboot                         service-force-down             volume-update
( W) p! E, T) Aflavor-access-add              --insecure                     --os-default-domain-id         rebuild                        service-list                  
1 x; ~: U' @, e6 a8 L5 e3 Zflavor-access-list             instance-action                --os-default-domain-name       refresh-network                --service-name                 " ^1 G+ h& t$ o
 楼主| 发表于 2021-9-8 16:14:41 | 显示全部楼层
经过精简的版本:9 @2 h) X7 ?$ C; O
cat nova.bash_completion % X8 D; O8 E+ T' c) C
_nova()1 }: k* Y; i9 V9 e* J
{
* Q; h5 L# x% @1 \   local cur prev words. t+ W( a( U' ^0 R' G
   COMPREPLY=()7 w' W& y- y( E5 `' j2 P0 ~; Y- s
   _get_comp_words_by_ref -n : cur prev words# |( V( e( F0 E6 v9 j0 K9 O
   # Command data:
0 D) B" s* [) t   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') }& v3 C2 i2 f! v8 _
  dash=-$ x/ n% m0 n' Y: m' S& n# A4 z
  underscore=_
7 z$ l' p9 O4 _  j7 b% u( G& |   cmd=""
1 W4 p$ O# ~/ M; ]& l- Y2 M5 w   words[0]=""7 }1 b* b$ a7 E  L: V8 X* y$ p% t. _
   completed="${cmds}"! F5 \2 c1 W$ p5 b
   for var in "${words[@]:1}"
: P' S9 c4 k# K1 K& [1 o- L   do
; C! J) ~1 h& z- {) o     if [[ ${var} == -* ]] ; then* I, p, N5 D7 D/ _9 \9 Q
       break
: Y( t9 y: m: J( a     fi
' N# C0 _7 U6 j     if [ -z "${cmd}" ] ; then
3 _5 J4 }* K: G3 \       proposed="${var}"
, p; ]* s  f) s! _0 o     else
7 c. p2 d$ l9 ~4 V( c       proposed="${cmd}_${var}"% M; I: D6 F2 L3 E. m
     fi( x' F- W& R7 H$ {
     local i="cmds_${proposed}"
7 a% X* ~! X; {3 N# e5 v3 Q     i=${i//$dash/$underscore}9 Z$ Y: Y1 }% K0 m( D4 g8 w" V: r# N
     local comp="${!i}"
8 c5 O: l' g( D( V+ s' W8 Y     if [ -z "${comp}" ] ; then
; W$ }2 _$ e" x       break
9 J6 h: V% n  [: Z$ i     fi0 q  n! L/ m6 `% [  P
     if [[ ${comp} == -* ]] ; then  x0 v& x# i# A
       if [[ ${cur} != -* ]] ; then* j- M  y3 e! {! Q7 G
         completed=""% v1 {1 R2 ?5 q+ w5 g
         break) o) O6 J  L/ p  t- o3 s* z$ E
       fi
4 B# r. H# ?7 h# Y2 ^/ @% H9 C     fi! H4 ]/ d1 @9 N' l, ^( ?" R: x
     cmd="${proposed}"
6 n$ r7 |7 V, Y8 Z     completed="${comp}"
" g- _( v/ `% g, x) ]! T4 Z3 }) L   done
9 z7 ]' K/ n9 r" h+ _, v   if [ -z "${completed}" ] ; then
" X: I9 q: X- m8 z     COMPREPLY=( $( compgen -f -- "$cur" ) $( compgen -d -- "$cur" ) )9 Q9 l- M0 `  _5 j& F* I
   else7 X: k, Y7 w( p
     COMPREPLY=( $(compgen -W "${completed}" -- ${cur}) )6 l; p1 Y9 w# ~, I9 T
   fi/ ~5 r/ e. P0 F
   return 0
* s+ }8 L  @6 {6 p( p/ g1 _) H- v }) \6 \( g( |8 Z+ r0 K
complete -F _nova nova
: K& a7 C' x- C
/ G& f1 J% N) a9 k! `7 O6 ~& B; w
# l/ Z" J: G* w" s
加入到/etc/proflie文件中,所有的用户都可以tab补全。
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

如有购买积分卡请联系497906712

QQ|返回首页|Archiver|手机版|小黑屋|易陆发现 点击这里给我发消息

GMT+8, 2021-10-28 16:47 , Processed in 0.051122 second(s), 21 queries .

Powered by LR.LINUX.cloud bbs168x X3.2 Licensed

© 2012-2022 Comsenz Inc.

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