$ 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
没有帮助。
我很茫然。 :(