ubuntu 终端自动完成功能如何工作?

ubuntu 终端自动完成功能如何工作?

它如何知道命令需要什么参数以及是否需要文件作为输入?它如何知道有哪些命令可用?

答案1

StackExchange 上有人问了一个几乎相同的问题:

Bash 的 tab 补全如何工作?

最近我花了很多时间在 shell 上,我想知道 tab 自动完成功能是如何工作的。它背后的机制是什么?bash 如何知道每个目录的内容?


得票最高的答案:

自动完成有两个部分:

  • readline 库fixje 已经提到过,管理命令行编辑,并在按下 tab 时回调 bash,以启用补全。然后,Bash 给出(参见下一点)一个可能的补全列表,readline 插入尽可能多的字符,这些字符由已输入的字符明确标识。(您可以对 readline 库进行大量配置,请参阅命令行编辑有关详细信息,请参阅 Bash 手册。

  • Bash 本身具有为各个命令定义补全机制的内置功能complete。如果当前命令未定义任何内容,则使用文件名补全(使用 opendir/readdir,如 Ignacio 所述)。

    定义你自己的完成的部分在部分中描述可编程完成简而言之, complete «options» «command»您可以定义某些命令的完成。例如complete -u su当完成命令的参数时su,搜索当前系统的用户

    如果这比正常选项所能涵盖的更复杂(例如,根据参数索引或取决于先前的参数的不同补全),则可以使用-F function,然后它将调用 shell 函数来生成可能的补全列表。(这用于 git 补全,它非常复杂,取决于子命令,有时取决于给定的选项,有时使用分支的名称(bash 对此一无所知)。

您可以使用简单的 列出当前 bash 环境中定义的现有补全complete,以了解可能的补全。如果您安装了 bash-completion 包(或系统上的名称),则会安装许多命令的补全,并且正如 Wrikken 所说,/etc/bash_completion包含一个 bash 脚本,该脚本通常在 shell 启动时执行以配置它。其他自定义补全脚本可以放在 中/etc/bash_completion.d;这些都来自/etc/bash_completion

相关内容