2016-11-18 81 views
1

在我的系統之一,bash的可編程完成工程基本命令是這樣的:如何爲命令行開關啓用Bash可編程完成?

$ ls -l t/ 
01_createTicket/    02_methods.t 
[etc...] 

但是,它並沒有爲交換機在我的自定義命令的工作:

$ ./test_all.pl --environment=test --verbosity=1 --test=t/ 
[will not autocomplete; does not show contents of directory] 

在所有我的其他系統,第二個例子起作用。

我需要在我的系統上做些什麼調整才能在這樣的長命令結束時啓用bash完成?

+0

「one」和「all other」系統有什麼區別?首先查找bash版本,'.bashrc'內容和'set'選項的差異。 **另外**在每臺機器上運行'complete -p'並比較,看看有什麼不同。 – cxw

+0

$:bash --version,GNU bash,版本4.2.46(1) - 釋放(x86_64-redhat-linux-gnu)在所有系統上。我的非工作系統有一堆完整的輸出-p,我的工作系統不會爲該命令提供任何輸出。 – Marcus

+1

嘗試在非工作系統上運行'complete -r'以使其與正在工作的系統匹配(每[this](https://blog.onetechnical.com/2012/06/19/disable-bash-autocompletion-on -ubunt /)) – cxw

回答

2

因爲你的非工作系統具有自動完成條目你的工作系統不行,因爲你在complete -p輸出看到,非工作系統上運行complete -r以清除完成條目(source)。

編輯完井可以在任何啓動文件的加載:/etc/profile~/.bash_profile~/.bash_login,或~/.profile。它們按照該順序進行測試(bash(1), section "Invocation")。我懷疑你的/etc/profile正在加載完成,這就是爲什麼你需要.bash_profile中的complete -r來清除它們。

+0

這是工作,但有一點需要注意....運行'完成-r'只會刪除自動完成條目(從而使其工作更好不要問我爲什麼),因此我在''.bash_profile'中放置了'complete -r'。好奇,如果有人知道這個沒有'.bash_profile'條目的永久修復。 – Marcus

+0

@馬庫斯謝謝!編輯。 – cxw