有没有办法控制在 bash4 命令提示符上键入的第一个命令的完成?
我可以用完整的 -E 控制“空行”的完成,但是只要键入一些字符,bash(或可能是 readline)就会给我 PATH 中的所有文件名、内置命令(if、then、else...)和函数完成尝试 (TAB)。
我能够通过在 PROMPT_COMMAND 中取消设置 PATH 并通过绑定函数以捕获 DEBUG 来恢复它来避免 PATH 条目,但是摆脱 bash bultin 命令完成没有运气。
有任何想法吗?
有没有办法控制在 bash4 命令提示符上键入的第一个命令的完成?
我可以用完整的 -E 控制“空行”的完成,但是只要键入一些字符,bash(或可能是 readline)就会给我 PATH 中的所有文件名、内置命令(if、then、else...)和函数完成尝试 (TAB)。
我能够通过在 PROMPT_COMMAND 中取消设置 PATH 并通过绑定函数以捕获 DEBUG 来恢复它来避免 PATH 条目,但是摆脱 bash bultin 命令完成没有运气。
有任何想法吗?
这是 bash 的可编程完成设施设计中的一个名副其实的弱点。即使是“默认”命令补全-D
也仅对空行上的命令生效(前提是没有complete -E
指定)。诸如complete -I
(对于不完整输入的命令)之类的东西丢失了。
从Bash 5.0 开始,内置的 bashcomplete
支持以下-I
选项:
-I 选项指示其他提供的选项和操作应适用于在该行的初始非赋值字上或在命令分隔符(如“;”)之后的完成。或“|”,通常是命令名称完成。
我能够毫无问题地在 ubuntu docker 映像上下载和安装 bash 5.1 ,并使用它来模拟工具环境 shell。Bash 5应该主要是一个替代品。
bash 完成存储在 /etc/bash_completion.d/ 如果您有 root 访问权限,那么您可以在那里编辑/删除文件。
如果您想在用户级别控制事物,那么您可以创建和编辑 ~/.inputrc。看看 /etc/inputrc,它会让你知道从哪里开始。
~/.inputrc 覆盖 /etc/inputrc 中的任何内容,因此您可以更改 bash_completion 查找完成文件的位置。您可以创建一个本地完成目录,并且只在其中包含您想要完成的项目。我相信您也可以消除 bash 内置函数。