Bash 选项卡完成在命令替换内失败

Bash 选项卡完成在命令替换内失败

我已经使用 Kill $(pidof ) 来终止程序有一段时间了,从昨晚开始,每次我尝试在其中使用制表符补全时,$()都会引发错误,

bash: unexpected EOF while looking for matching `)'
bash: syntax error: unexpected end of file

制表符补全在命令替换之外工作得很好。

我想我的问题是 Ubuntu 系统上制表符补全的配置文件在哪里?如果有人遇到过这个特定问题,或者可以清楚地看到我看不到的内容,如何解决这个问题,和/或为什么会发生这种情况? (我总是想知道为什么。)如果不是这样,即使我应该在哪里以及如何开始调查这个问题,我也将不胜感激。

更新

选项卡补全$(pidof不再抛出错误,但现在根本不起作用。我以前从未真正搞乱过任何 bash 内部结构,但我不怕弄脏我的手。非常感谢任何指导。

答案1

我想我的问题是 Ubuntu 系统上制表符补全的配置文件在哪里?

在 Ubuntu 中,bash-completion 库位于/usr/share/bash-completion/bash_completion.

当您启动 shell 时,可以通过多种方式获取该库,例如,

  • ~/.bashrc-> /etc/bash_completion->/usr/share/bash-completion/bash_completion

  • /etc/profile-> /etc/profile.d/bash_completion.sh->/usr/share/bash-completion/bash_completion

如果有人遇到过这个特定问题,或者可以清楚地看到我看不到的内容,如何解决这个问题,和/或为什么会发生这种情况? (我总是想知道为什么。)

我最近回答过一个相关的问题在 AskUbuntu 上(并在此过程中发现了您的问题),因此请在那里查找详细信息,但简而言之,这是一个已知的错误

要修复它,您可以:

  1. 代替

    [[ ${!2} == \$* ]] && eval $2=${!2}
    

    [[ ${!2} == \$\'* ]] && eval $2=${!2}
    

    _quote_readline_by_ref在文件中的函数中/usr/share/bash-completion/bash_completion(不推荐);或者

  2. 查看最新的 Git 版本bash 完成库并使用它 - 该错误似乎在此版本中得到修复。

使用这些解决方案中的任何一个,您都不会在命令替换中再次使用制表符完成功能,但至少,您不会再看到该错误消息。

要真正在命令替换中实现制表符补全,您必须恢复到早期的 Bash 版本(我听说它正在工作),或者等待库通过 Bash 4.3 真正解决该问题。

相关内容