我已经使用 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 上(并在此过程中发现了您的问题),因此请在那里查找详细信息,但简而言之,这是一个已知的错误。
要修复它,您可以:
代替
[[ ${!2} == \$* ]] && eval $2=${!2}
和
[[ ${!2} == \$\'* ]] && eval $2=${!2}
_quote_readline_by_ref
在文件中的函数中/usr/share/bash-completion/bash_completion
(不推荐);或者查看最新的 Git 版本bash 完成库并使用它 - 该错误似乎在此版本中得到修复。
使用这些解决方案中的任何一个,您都不会在命令替换中再次使用制表符完成功能,但至少,您不会再看到该错误消息。
要真正在命令替换中实现制表符补全,您必须恢复到早期的 Bash 版本(我听说它正在工作),或者等待库通过 Bash 4.3 真正解决该问题。