2015-08-14 18 views
1

啓用慶典完成(通過. /etc/bash_completion在〜/ .bashrc)工作在我的Ubuntu 14.04.3機,我沒有得到目錄內容完成了cmd --param=<TAB>,即,什麼也沒有發生時,按下。當我開始一個原始的bash(例如通過env -i bash --norc)時,它按預期工作 - 但是沒有可編程的完成。我找到Bash completion for path in argument (with equals sign present),它談到了類似的問題,但1)各自的npm腳本在我的機器上不存在,2)即使從/etc/bash_completion.d中刪除所有文件也不能解決問題。我能做些什麼才能正確完成?擊的equals完成後不會在Ubuntu

我通過運行complete -r -D發現了一個半心半意的修復程序,它可以防止bash嘗試完成新的命令。這樣可以在平等後再次完成,但是會停止完成,例如,killall。

+0

'$ COMP_WORDBREAKS'是否包含'='?如果沒有,請嘗試'COMP_WORDBREAKS + =='並查看完成是否符合您的期望。 – rici

+0

$ COMP_WORDBREAKS的內容是'''><=; |&(:'。'''刪除或添加'='似乎並不會改變'='後的行爲,不幸的是, – tlangner

+0

運行'complete -p cmd '看看是否有爲你的* cmd *定義的compspec。 – pynexj

回答

0

雖然我不明白你的意思是「停止完成後killall」,我相信有一個解決方法。我發現它here。它涉及覆蓋破碎的bash完成函數。複製粘貼在這裏記錄。解決方法是以下內容添加到您的.bashrc

_completion_loader() { 
    local dir=/usr/share/bash-completion/completions 
    local cmd="${1##*/}" 
    . "${dir}/${cmd}" &>/dev/null && return 124 
    complete -o default -o bashdefault "${cmd}" &>/dev/null && return 124 
} 

我不確定是否實際報告bug固定在bash:在bug報告的意見不清,提一對夫婦更多的問題。爲了記錄,我的bash是版本4.2.46(1) - 發行版(Redhat EL 7),它確實有這個bug。