$ 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
我的用戶來說只是source
s .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
沒有幫助。
我很茫然。 :(