2012-02-15 18 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