2011-07-13 63 views
2

假設的更人性化的完成,我們有這樣的環境:需要的環境變量

mkdir -p /tmp/foo/bar/ 
export TEST=/tmp/foo 

開箱,$ TEST的bash補是非常不一致。證人:→

$ cd $TES<Tab>  → $ cd $TEST<cursor> 
$ cd $TEST<Tab> → $ cd $TEST<cursor> 
$ cd $TEST/<Tab> → $ cd $TEST/<cursor> 
$ cd $TEST/b<Tab> → $ cd $TEST/b<cursor>  # no actual completion! 

$ ls $TES<Tab>  → $ ls $TES<cursor>   # no actual completion! 
$ ls $TEST<Tab> → $ ls $TEST<cursor>   # same 
$ ls $TEST/<Tab> → $ ls /tmp/foo/bar/<cursor> # expands var, annoying! 

$ echo $TES<Tab> → $ echo $TEST <cursor>  # with a space, annoying! 
$ echo $TEST<Tab> → $ echo $TEST <cursor>  # same 
$ echo $TEST/<Tab> → $ echo /tmp/foo/bar/<cursor> # expands var, annoying! 

與例如如何比較這tcsh完成,它總是完成$TES$TEST/(如果$TEST擴展到一個目錄名)或$TEST(如果沒有),並且永遠不會擴展任何東西。就我的傲慢觀點而言,這是正確的,而bash卻完全錯了。

所以問題很明顯。是否有可能讓bash做正確的事情,如果是的話,如何?我試圖瞭解manual,但沒有太大的成功。

+5

重寫bash的一部分。 –

+0

您可能想嘗試zsh。對於基本用法,您可能會發現與bash沒有區別。 zsh可以很容易地配置來做你想做的事情。 –

回答