如何確保 bash 在製表符完成時*從不*擴展環境變數中的路徑?

如何確保 bash 在製表符完成時*從不*擴展環境變數中的路徑?
$ bash --version
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)

我通常透過 MATE 終端機在 Ubuntu 16.04 機器上使用上述 bash 版本。但目前我正在使用 macOS 10.14.6 的 Terminal.app 透過 SSH 連接到該電腦。對於.bash_profile我的用戶來說只是sources .bashrc,所以除了終端模擬器之外不應該有任何配置差異。

我有一些環境變量,用於縮寫常用但很長的目錄路徑,在 .bashrc 中定義,如下所示:

export FOO=~/foo/bar/baz
export BAR=~/foo/bar/baz/qux/foobar

我習慣在這些變數的子目錄上使用製表符補全(我的意思是輸入部分名稱並按 Tab 鍵),因此我可以輸入:

cd $FOO/mi<TAB>

並得到:

cd $FOO/misc/

這是我習慣並喜歡的 MATE 終端機下的行為。但是使用 Terminal.app 透過 SSH 連接到同一台機器,它會令人惱火地擴展變數:

cd /home/andrea/foo/bar/baz/misc/

我不知道為什麼會發生這種情況,但我懷疑 Terminal.app 發送了不同的轉義序列。如果我輸入<ESC><TAB>Terminal.app 而不是<TAB>,我會得到熟悉且所需的行為(不會擴展環境變數)。不幸的是,它看起來不像 Terminal.app 的轉義序列用於選項卡是可配置的。

所以,我想知道是否可以強制 bash 始終使用我想要的行為。

在答案中bash:變數名稱未透過製表符補全進行擴展(其中某人擁有對面的對我來說有問題,他們想要我的行為想要),我見過shopt -s direxpand。所以我嘗試了它的逆,shopt -u direxpand但沒有幫助。在https://stackoverflow.com/questions/6418493/bash-variable-expansion-on-tab-complete我也看到了shopt -s cdable_vars,但同樣shopt -u cdable_vars沒有幫助。

我很茫然。 :(

相關內容