2012-02-15 52 views
6

我注意到有时候命令可能会被制表符完成。如何为linux命令实现tab完成?

例如xen中的xm命令。

您类型XM [空格] [标签]和它打印出的有效选项 它们是:

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 

这是非常漂亮!

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

+0

这是由shell完成的。你在问什么外壳? (我猜bash,因为它现在是大多数发行版中的默认设置。) – Cascabel 2012-02-15 01:39:54

+0

是bash,我现在用bash标记了我的问题。它是一种包装脚本? – Matt 2012-02-15 01:40:57

+2

看起来像是重复的http://stackoverflow.com/questions/5570795/how-does-bash-tab-completion-work – 2012-02-15 01:44:34

回答

7

这是一个非常广泛的问题,但总的想法是,你注册到无论是compgencomplete内置的东西。他们是both documented in the manual。前一节记录了programmable completion的一般主题,介绍了如何处理完成尝试。

有关整个示例,请参阅/etc/bash_completion,它提供了bash附带的所有默认完成(超出完全内置的东西,例如文件名完成)。有关更多示例,请参阅/etc/bash_completion.d中的任何内容;那些自动采购/etc/bash_completion作为延长默认完成的一种方式。

-1
+1

当你的答案的一半是另一个问题的链接时,通常这是一个标志,你应该投票结束重复,而不是发布答案。 (如果你觉得第二个链接是有帮助的,你可以在这个问题的某个地方贡献它。) – Cascabel 2012-02-15 01:53:43

+0

@Jefromi足够公平 - 我认为他们是不一样的,因为其他问题不包含实际完成的请求,它是如何工作的一部分。第二个环节是我认为是指第二部分。 – 2012-02-15 02:02:05

+0

是的,这不是一个确切的*重复,但我认为它足够接近;它指出你在正确的方向,特别是考虑到答案提到/ etc/bash_completion,在那里你可以找到一个十亿个例子。如果你想为另一个问题添加一个答案,更多地关注实现实际完成的东西,我认为这很有价值。 – Cascabel 2012-02-15 02:07:52