40

我正在运行 Ubuntu 11.04,当我尝试在以变量开头的路径上使用 bash 中的制表符完成时,我看到了一些奇怪的行为。如果我有 TOP=/scratch,我尝试制表符完成:

cd $TOP/foo

它变为:

cd \$TOP/foo

我希望它完成为: cd $TOP/foobar 或 cd /scratch/foobar 但我会接受它,只是不改变行并要求我取消转义 $。

有谁知道我应该在 bash/readline 的哪个位置解决这个问题?

4

3 回答 3

38

找到错误报告,请注册(如果尚未注册)并将自己添加到“受影响的人”列表中,我刚刚做了:

https://bugs.launchpad.net/ubuntu/+source/bash/+bug/778627

解决方法

尝试启用direxpandcdable_vars

shopt -s direxpand
# or
shopt -s cdable_vars

显然EscTab可能是一种解决方法

我还没有找到合适的解决方案,但是有一个解决方法。可以通过按 Esc 和 Tab 来禁用环境变量的转义。

# cd $SO + [Esc] + [Tab]
# cd $SOME_DIR

确认这是一个错误!我刚刚确认同样的事情适用

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 10.10
Release:        10.10
Codename:       maverick

我在(最新的)natty 上遇到了错误的行为:

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 11.04
Release:    11.04
Codename:   natty

虽然我必须补充一点,我没有转义斜线,但路径(虽然有效、现有、可访问和可读)没有得到扩展。

信息:https ://help.ubuntu.com/community/ReportingBugs

于 2011-06-20T23:23:35.690 回答
13

bugs.launchpad.net的其他答案中提到的错误报告通过发出以下命令提供了一种新的解决方法:

shopt -s direxpand

这个对我有用。

于 2013-09-05T13:22:58.800 回答
0

我在 cygwin (NT-6.1 2.0.1 2015-04-30) bash (GNU 4.3.33) 中遇到了类似的问题,尤其是当我尝试对包含空格的路径进行制表符扩展时。

我放入shopt -s direxpand了我的 ~/.bashrc。问题解决了。

于 2015-05-18T17:19:33.553 回答