繁体   English   中英

bash选项卡如何完成工作?

[英]How does bash tab completion work?

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

自动完成有两个部分:

  • 正如fixje已经提到的那样,readline库管理命令行编辑,并在按下tab时回调bash,以启用完成。 Bash然后给出(参见下一点)可能的完成列表,readline插入尽可能多的字符,这些字符由已经输入的字符明确标识。(您可以配置readline库,请参阅Bash的命令行编辑部分)手册了解详情。)

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

    定义您自己的完成的部分在可编程完成部分中描述。 简而言之,通过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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM