Bash 完成复活

Bash 完成复活

我从这个问题开始:

Bash 禁用某些命令的自动完成功能

唯一的区别是,在我的例子中,有问题的命令是configure.我成功应用了该问题中描述的解决方案(即您应该删除带有 的完成complete -r configure)。问题是……如果你尝试完成一次,它就会死而复生。

$ complete -p configure 
complete -F _configure configure       # Hum... there *is* a completion

$ complete -r configure                # So let's remove it!

$ complete -p configure 
bash: complete: configure: no completion specification   # Ha! It's gone!

                                       # Let's try it now.
$ ./configure <TAB>                    # Damn! It still doesn't work!

$ complete -p configure                # It's back from the dead!!!
complete -F _configure configure

有人知道如何解决这个问题吗?

编辑:
另外一条信息:

我添加了complete -p configure到我的.bashrc然后它开始在启动时给我这个错误:

bash: complete: configure: no completion specification

这很有趣。启动时不存在完成configure...似乎某种动态的完成定义发生在这里。

答案1

是的,脚本为configure会动态加载。

您可以通过设置打印所有已执行命令的选项来确认set -x。并尝试使用 TAB 自动完成。

找到来源的线索是这个命令的输出

dpkg -L bash-completion | xargs egrep '\<_configure\>' 2>/dev/null

只需删除该文件configure并重新启动 bash 实例或使用 清除即可complete -r configure

sudo rm /usr/share/bash-completion/completions/configure

相关内容