bash tabbing for autocompletion escapes $

时间:2015-09-08 16:42:41

标签: bash bash-completion

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

$ 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。

- UPDATE。其他完成似乎照常工作,例如cdecho无法逃脱$。我也暂时从我的/etc/share/bash-completion/bash_completion注释掉了/etc/bash.bashrc,它停止了$ -escaping。所以它看起来像某种完整的配置问题。

1 个答案:

答案 0 :(得分:1)

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

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

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