bash:變數名稱未透過製表符補全進行擴展

bash:變數名稱未透過製表符補全進行擴展

在 bash 版本「3.2.51(1)-release」(作業系統:SUSE Linux Enterprise Server 11.1 (x86_64))的遠端電腦上,我無法使用變數名稱執行常規的製表符補全。例如,我想輸入:

echo $OLDPWD/

然後在斜線末尾,我可以點擊“Tab”,變數名稱將擴展到舊目錄名稱(在最後一個cdpushd命令之前)。這適用於我自己的筆記型電腦(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 擴展”

相關內容