【问题标题】:bash tabbing for autocompletion escapes $用于自动完成的 bash 制表符转义 $
【发布时间】:2015-09-08 16:42:40
【问题描述】:

在 shell (GNU bash, version 4.2.47(1)-release (x86_64-suse-linux-gnu)) 中,当我点击选项卡进行自动完成时,变量名完成后“$”被转义,但如果没有完成,那么它只是响起。例如

$ ls $JDK_H<tab>

结果

$ ls \$JDK_HOME (with a trailing space)

在旧的 GNU bash 版本 3.2.51(1)-release (x86_64-suse-linux-gnu) 上,它在完成后没有转义“$”,这正是我想要的。

有没有办法在没有强烈副作用的情况下获得这种旧行为?我的 BASHOPTS 和 SHELLOPTS 是:

# (indented for readability)
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote
            :force_fignore:histappend:interactive_comments:login_shell
            :progcomp:promptvars:sourcepath
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history
            :interactive-comments:monitor

谢谢。我正在使用 SLES SP11。

--更新。其他完成似乎照常工作,例如cdecho 不要转义 $。我还暂时从我的/etc/bash.bashrc 中注释掉了/etc/share/bash-completion/bash_completion,它停止了$ 转义。所以它看起来像是某种完整的配置问题。

【问题讨论】:

  • 向 SuSE 报告错误。
  • 我不确定这是一个错误还是一个功能 :-( 我知道这很令人沮丧
  • 为什么要关闭?我在 SO 上看到了无数的 shell 问题,其中一些确实与版本相关
  • 许多题外话被忽视的事实并没有改变规则。这有几个原因——如果它是一个错误,你应该提交一个错误报告;它与编程没有直接关系;你不是在问如何在代码中解决这个问题。我也认为它是重复的,尽管我无法找到我之前看到的类似问题。
  • 当然,np。我看到几个指针说这是一个错误。 (顺便说一句,我认为 SO 是一个活生生的生态系统,适当的用途是不断被社区完善。)

标签: bash bash-completion


【解决方案1】:

最近的 bash 版本引入了一些与此相关的兼容性问题。试试这样:

complete -r # temporarily disable all completion rules
shopt -s direxpand

bug-bash 邮件列表报告的类似问题的链接:

【讨论】:

  • 我没有看到任何与我的 bash 3 不同的地方。我看到complete 下有大量配置;所以我暂时从/etc/bash.bashrc 中注释掉了/etc/share/bash-completion/bash_completion,现在cd 就像ls 等一样工作。所以它看起来像是某种complete 配置问题
  • 忘记添加了,shopt -s direxpand 不会改变这种行为
  • 通过添加一些链接更新。
  • 感谢您的链接和提示。它声称该问题已在 4.2.45 中解决,但我正在运行 bash 4.2.47 并且仍然可以看到它。
猜你喜欢
  • 2014-03-28
  • 2017-05-15
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多