【问题标题】:Bash completion after equals does not work on Ubuntu等于后的 Bash 完成在 Ubuntu 上不起作用
【发布时间】:2015-08-14 08:55:28
【问题描述】:

在我的 Ubuntu 14.04.3 机器上启用了 bash 补全(通过 ~/.bashrc 中的 . /etc/bash_completion),我没有得到 cmd --param=<TAB> 的目录内容补全,也就是说,按下 .当我开始一个原始的 bash(例如通过env -i bash --norc)时,它按预期工作——但是没有可编程的完成可用。我发现 Bash completion for path in argument (with equals sign present) 谈到了类似的问题,但是 1)我的机器上不存在相应的 npm 脚本,并且 2)即使从 /etc/bash_completion.d 中删除所有文件也不能解决问题。我该怎么做才能正确完成?

我通过运行complete -r -D 找到了一个三心二意的修复程序,它阻止了 bash 尝试完成新命令。这会在 equals 之后再次启用完成,但会停止完成,例如 killall。

【问题讨论】:

  • $COMP_WORDBREAKS 是否包含=?如果没有,请尝试 COMP_WORDBREAKS+== 并查看完成是否符合您的预期。
  • $COMP_WORDBREAKS 的内容是"'><=;|&(:。删除或添加 = 似乎不会改变行为 wrt。不幸的是,在= 之后完成。
  • 运行 complete -p cmd 并查看是否为您的 cmd 定义了 compspec。
  • 不,没有定义特定的 compspec,它不能正确完成任何命令(上次我使用 ljkasdfjler --asdlk=<TAB> ;))

标签: bash ubuntu bash-completion


【解决方案1】:

虽然我不明白“killall 后停止完成”是什么意思,但我相信有一种解决方法。

我找到了here。它涉及覆盖损坏的 bash 完成功能。在这里复制粘贴以备不时之需。解决方法是将以下内容添加到您的.bashrc

_completion_loader () {
  local dir=/usr/share/bash-completion/completions
  local cmd="${1##*/}"
  . "${dir}/${cmd}" &>/dev/null && return 124
  complete -o default -o bashdefault "${cmd}" &>/dev/null && return 124
}

我不确定实际报告的bug 是否已在 bash 中修复:错误报告中的 cmets 不清楚并提到了更多问题。作为记录,我的 bash 版本是 4.2.46(1)-release (Redhat EL 7),它确实有这个错误。

【讨论】:

    猜你喜欢
    • 2018-10-28
    • 2020-07-07
    • 1970-01-01
    • 2016-08-16
    • 2010-11-11
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多