如何为linux命令实现制表符完成?

Mat*_*att 7 linux bash command-line

我注意到有时候命令可以完成.

例如xen中的xm命令.

你输入xm [space] [tab]并输出有效的选项:

addlabel        destroy         info            network-attach  resume          sysrq           vnet-delete
block-attach    dmesg           labels          network-detach  rmlabel         top             vnet-list
block-detach    domid           list            network-list    save            trigger         vtpm-list
block-list      domname         loadpolicy      new             sched-credit    unpause         
cfgbootpolicy   dry-run         log             pause           sched-sedf      uptime          
console         dump-core       makepolicy      reboot          serve           vcpu-list       
create          dumppolicy      mem-max         rename          shutdown        vcpu-pin        
debug-keys      getlabel        mem-set         resources       start           vcpu-set        
delete          help            migrate         restore         suspend         vnet-create 
Run Code Online (Sandbox Code Playgroud)

那太漂亮了!

如何在Linux中实现自己的tab命令完成?

Cas*_*bel 9

这是一个非常广泛的问题,但一般的想法是你用compgen或者complete内置的东西注册.它们都记录在手册中.上一节介绍了可编程完成的一般主题,介绍了如何处理完成尝试.

对于大量的示例,请参阅/etc/bash_completion,它提供了bash附带的所有默认完成(超出了文件名完成等完全内置的东西).有关更多示例,请参阅/etc/bash_completion.d; 这些是/etc/bash_completion作为扩展默认完成的方式自动获取的.