如何确保 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我的用户来说source.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 的转义序列用于 TAB是可配置的。

所以,我想知道是否可以强制 bash 始终使用我想要的行为。

在回答bash:变量名称未通过 Tab 补全进行扩展(当某人有对面的对我来说,问题是他们想要我想要),我已经看到了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没有帮助。

我很茫然。 :(

相关内容