【问题标题】:Bash variable expansion on tab complete选项卡上的 Bash 变量扩展完成
【发布时间】:2011-06-20 22:55:43
【问题描述】:

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

cd $TOP/foo

它变为:

cd \$TOP/foo

我希望它完成到: cd $顶部/foobar 或者 cd /scratch/foobar 但我会接受它,只是不改变线路并要求我取消转义 $。

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

【问题讨论】:

  • 另一种解决方法:使用 +-E 或 -E 展开 var。 [askubuntu.com/questions/41891/…[1]:askubuntu.com/questions/41891/…
  • 我的解决方法是:sudo yum remove bash-completion。选项卡完成仍然有效,但只是 isn't as customizable。重要的是,变量中的路径在点击选项卡后不会扩展并保持为变量。
  • 我在 Centos 8 上运行,我看到了同样令人讨厌的行为。在 Centos 6 上很好。现在是 2020 年。

标签: bash readline bash-completion


【解决方案1】:

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

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

解决方法

尝试启用direxpandcdable_vars

shopt -s direxpand
# or
shopt -s cdable_vars

显然是EscTab might be a workaround:

我还没有找到合适的解决方案,但有一个解决方法。环境变量的转义可以通过按 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

【讨论】:

    【解决方案2】:

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

    shopt -s direxpand
    

    它对我有用。

    【讨论】:

    • 这对你有什么作用,我看不出设置或取消设置有什么不同? ESC-^E 确实为我扩展了 var ,这有帮助。我在 Bash 4.2.25
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多