Din*_*esh 8 bash bash-completion
在 shell ( GNU bash, version 4.2.47(1)-release (x86_64-suse-linux-gnu)) 中,当我点击 tab 进行自动补全时,“$”在变量名补全后被转义,但如果没有补全,那么它只会响铃。例如
$ ls $JDK_H<tab>
Run Code Online (Sandbox Code Playgroud)
结果是
$ ls \$JDK_HOME (with a trailing space)
Run Code Online (Sandbox Code Playgroud)
在旧的 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
Run Code Online (Sandbox Code Playgroud)
谢谢。我正在使用 SLES SP11。
- 更新。其他完成似乎照常工作,例如cd或echo不转义$. 我也暂时注释掉了/etc/share/bash-completion/bash_completion我的/etc/bash.bashrcwhich,阻止了$逃逸。所以这看起来像是某种完整的配置问题。
最近的 bash 版本引入了一些与此相关的兼容性问题。尝试这样:
complete -r # temporarily disable all completion rules
shopt -s direxpand
Run Code Online (Sandbox Code Playgroud)
bug-bash邮件列表中报告的类似问题的链接: