2012-06-29 90 views
2

下Debians BASH我可以做到以下幾點:

foo=/path/to/some/file 

cat $f[TAB] 

正如你所看到的,我可以按TAB自動完成變量$ foo的。

Ubuntu下(11)的行爲是不一樣的(我已經激活了我的.bashrc '的/ etc/bash_completion')。

這是工作:

echo $f[TAB] 

這一個不工作:

cat $f[TAB] 

誰能給我一個提示,如何讓最後一個工作?

回答

3

您可以通過執行去除由/etc/bash_completion提供cat完成規格:

complete -r cat 

,或者你可以看到,如果修改bash,那麼你的版本/etc/bash_completion工作提供的完成選項是使用:

complete -F _longopt -o filenames -o bashdefault cat 

如果你正在使用bash 4.2的最新補丁版本,有一個選項,可以幫助(我還沒有嘗試過):

shopt -s direxpand 
+0

「完全-r貓」 解決我的問題。謝謝。 – casper

+0

好的..這解決了我的問題,「貓」..但使用「grep」等問題相同的問題。我是否必須對每個我使用的程序執行此操作,或者是否存在全局方式? – casper

+0

@casper:你可以嘗試用no-op來替換'_longopt()':_longopt(){: ''但這很可能會破壞其他事情。你可以運行一個循環:'for cat grep;完成-r「$ p」; done'。你可以修改'_longopt()',這樣當'$ cur'以「$」開始時,它會將'COMPREPLY'設置爲由變量名組成的'compgen'。可能還有其他方法。我的答案中的第二個建議是否適用於您? –