
在 bash 版本「3.2.51(1)-release」(作業系統:SUSE Linux Enterprise Server 11.1 (x86_64))的遠端電腦上,我無法使用變數名稱執行常規的製表符補全。例如,我想輸入:
echo $OLDPWD/
然後在斜線末尾,我可以點擊“Tab”,變數名稱將擴展到舊目錄名稱(在最後一個cd
或pushd
命令之前)。這適用於我自己的筆記型電腦(Debian 7、Bash 4.2.37(1)-release)。為什麼在這個 SLES bash shell 中它不起作用?
同樣,如果我輸入
echo $OLDP
然後在“P”末尾點擊“Tab”,bash 會將其完成到$OLDPWD
.這在 SLES 11 bash 中也不會發生。
哪些控制變數(shopt?設定?)會影響此行為?
答案1
shopt -s direxpand
將在 bash 4.2 中echo $HOME/<tab>
擴展至。echo /home/matt/
在 bash 4.1 中它應該是預設值。
我發現這bash-completion
真的會把事情搞砸。我總是卸載bash-completion
或運行complete -r
以確保各個完成規則不會對預設完成做一些愚蠢的事情。
如果$OLDPWD
實際設定了則應echo $OLDP<tab>
擴展為echo $OLDPWD
.我不知道什麼會阻止這種情況發生。
答案2
嘗試C-x $
而不是TAB
明確請求可能的變數(而不是其他東西)完成。
答案3
檢查答案 urxvt - 選項卡展開環境變量德米特里·亞歷山德羅夫。
「這是關於 direxpand 選項。
$ shopt -s direxpand 和 $FOO_PATH/
將由 TAB 擴展”