bash选项卡如何完成工作?

时间:2011-04-06 17:52:30

标签: bash shell autocomplete

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

2 个答案:

答案 0 :(得分:94)

自动完成有两个部分:

  • 如fixje所述,readline库管理命令行编辑,并在按下tab时回调bash,以启用完成。 Bash然后给出(参见下一点)可能的完成列表,并且readline插入尽可能多的字符,这些字符由已经输入的字符明确标识。(您可以配置readline库,请参阅Command line editing部分有关详细信息,请参阅Bash手册。)

  • Bash本身具有内置的complete来定义单个命令的完成机制。如果对于当前命令没有定义任何内容,它使用文件名完成(使用opendir / readdir,如Ignacio所说)。

    Programmable Completion部分介绍了定义自己的完成的部分。简而言之,有 complete «options» «command»您可以定义某些命令的完成情况。例如complete -u su在完成su命令的参数时,搜索当前系统的用户

    如果这比这更复杂 正常选项可以涵盖(例如,不同的完成取决于参数索引,或取决于先前的参数), 您可以使用-F function,然后调用shell函数来生成可能的完成列表。 (例如,这用于git完成,这非常复杂,具体取决于子命令 在给出的选项上,有时使用分支的名称(这些都不是bash所知道的。)

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

答案 1 :(得分:7)

如果您对基础知识感兴趣: Bash使用readline,其中包含历史记录和基本完成功能。如果您想要详细了解,可以检查来源。 此外,您可以使用readline构建自己的CLI接口并完成