bash之命令行自动补全

写在前面

在前一阵子,我在系统上安装了elfutils软件包,然后在使用eu-readelf的过程中,发现无法支持命令参数自动补全功能,但是系统自带的readelf在输入“--”之后连续按两次键是可以自动补全的。后来在网上找到的解决办法是在.bashrc中添加“complete -F _longopt eu-readelf”解决了这个问题,由于当时没时间想这个,就把这个问题抛之脑后了。

然后近几天,我在学习使用tmux这个终端复用神器,功能强大归强大,但美中不足的是tmux也没有命令参数自动补全功能,这让我很恼火,总不至于每次都手动慢慢输入完整的命令参数吧?于是满心欢喜的在.bashrc中添加“complete -F _longopt tmux”,奢望着这次也可以解决问题,但是结果是令人失望的,尽然毫无效果!!!

由此才意识到我对天天使用的工具思考的太少,把按键自动补全功能认为是理所当然了,从来没想过这背后究竟发生了什么。

在了解了相关的知识后,才发现原来命令行的自动补全功能并不是程序自身的功能,而是我们天天与之打交道的shell的功能(本文限定使用的shell是bash)。bash提供有三个内置命令complete、compgen以及compopt以及几个相关的内置环境变量控制自动补全功能。因此才有了本文。

PS:关于tmux参数自动补全的功能,网上已经有大牛做好了:tmux-bash-completion

《让你提升命令行效率的 Bash 快捷键 [完整版]》


参考链接:

《编写 Bash 补全脚本》

《我使用过的Linux命令之complete - 强劲的bash参数补全功能》

《Tmux会话管理(自动补全)》

《Custom bash autocomplete script》

《详解Linux命令行自动补全及编程实现方法》

《使用Bash中Complete自动补全命令》

《linux shell中的命令自动补全(compgen complete)与 命令行参数解析》

《Shell脚本参数自动补全》

《 【Bash百宝箱】shell命令行自动补全(compgen、complete、compopt)》

《详解Linux Shell命令自动补全》

《跟我一起写shell补全脚本》

《10 Useful Linux Bash_Completion Complete Command Examples (Bash Command Line Completion on Steroids)》(Linux 中 10 个有用的命令行补全例子)

《命令行自动补全原理》

《Improving Command Line Productivity with GNU Readline》

《Accessing tab-completion programmatically in Bash》

《Bash Completion, Part 1: Using Tab Completion》

《Linux十个命令补全技巧(上)》

《Linux中10个有用的命令行补齐命令》

《Snippet 0x0B: Bash completion with sub-commands and dynamic options》


《GNU Readline 库及编程简介》

你可能感兴趣的:(工具学习)