新浪博客

Linux中10个命令行自动补全技巧

2016-10-16 18:04阅读:
Linux中10个命令行自动补全技巧 Linux中10个命令行自动补全技巧
2016-10-13 21:26
linux部落
在 Linux 系统中,当你输入一个命令,再按两次 TAB 键,就会列出所有以你输入字符开头的可用命令。这并不新鲜,可能你已经知道了。这个功能被称作命令行补全bash completion。默认情况下,bash 命令行可以自动补全文件或目录名称。不过,我们可以增强 bash 命令补全功能,通过 complete 命令让它达到新的高度。点击链接加入群【Linux学习交流】:http://qm.qq.com/cgi...
这个教程说明了我们是怎样使用可编程的命令行补全功能(programmable completion)把自动补全功能应用于选项或者命令行参数。
例如:在输入 write 命令之后,如果你按两次 TAB 按键,自动补全功能会提供可供执行 write 操作的用户列表。
在下面的例子中,可以为 telnet 命令显示可用的主机名:
要让可编程命令补全功能在你的终端起作用 ,你只需要如下执行/etc/bash_completion即可:
你也可以取消/etc/bash.bashrc(来自 Ubuntu Linux 13.04 系统)中如下的注释,这样,你就可以不需要执行上面的命令了:
如果你没有发现这些代码,也没有找到/etc/bash_completion文件,那么你只需要通过使用apt-get命令来安装bash_completion 包即可。
1. 查看已有的命令行补全
在启用可编程的命令行补全功能后,就已经有了一些定义好的命令补全功能。complete 命令用于定义命令行补全。
要查看已有的命令行补全,如下使用 comp
lete 命令:
上面例子中的 -p 选项是可选的。
2. 列出 bash 中标准补全功能
变量补全默认情况下,Bash 为 Linux 用户提供了下列标准补全功能。
用户名补全
主机名补全
路径补全
文件名补全
我们在之前的 bash 标准补全中讨论过这些。
3. 定义一个命令名补全
通过 -c 选项可以将所有的可用命令作为一个命令的补全参数。在下面的例子里面,为 which 命令定义了一个补全(LCTT译注:在按两下 TAB 时,可以列出所有命令名作为可补全的参数)。
如上,如果按下 ‘y’,就会列出所有的命令名。
4. 定义一个目录补全
通过选项 -d,可以定义一个仅包含目录名的补全参数。在下面的例子中,为 ls 命令定义了补全。
如上,连按下 TAB 仅会显示目录名。
5. 定义一个后台任务名补全
补全功能也能够以任务名作为补全参数。选项 -j 可以定义任务名作为传递给命令的参数,如下:
关于后台任务,你可以参考 Linux 后台任务中的例子了解如何管理后台任务。
6. 带有前缀和后缀的补全
补全功能可以为实际的补全内容定义前缀和后缀。在下面的例子中,为 list_job_attrib.sh 定义了补全内容的前缀和后缀。
7. 带有排除的文件名和目录名补全
假如脚本运行完成后,输出目录如下:
如上,如果你想要 ls 命令的补全忽略 .tmp 和 .o 文件:
FIGNORE 是一个环境变量,它包含了自动补全所需要排除的文件名后缀。
8. 通过 IFS 变量分割字符串得到补全值
可以通过 -W 选项定义补全值列表,然后通过 IFS 环境变量进行切分。切分结果会展开变量并作为补全显示。
如上所述,字符串通过 IFS 分隔符进行切分后,内嵌的变量会被展开为变量值,所以可以如下使用变量:
9. 写个函数来生成补全
你可以引入一个函数来定义补全。使用 -F 选项将函数名传给 complete 命令,执行函数生成补全内容。例如,函数如下:
在上述函数中:
COMPREPLY : 该数组控制连按下 TAB 后显示的结果
COMP_WORDS : 该数组包含命令行输入的单词
COMP_CWORD : COMP_WORDS 数组的索引,使用它来区分命令行可以访问的单词位置
compgen : -W 基于 $current_arg 提供可能的补全及其参数
该函数放在 parser_option 文件中,并通过 source 命令引入:
如上,parser.pl 的选项是由函数 _parser_options() 生成的。
提示: 查看/etc/bash_completion 来了解更多的可编程补全函数。
10. 当第一个规则没有生成结果时,就使用第二个
如果定义的补全规则没有生成匹配时,可以使用 -o 选项生成补全。
点击链接加入群【Linux学习交流】:Linux学习交流
赞赏
1人赞赏
2174举报
推荐查看
推荐话题 查看更多linux话题
GParted 动态调整Linux分区大小 | 奋斗博客
在虚拟化环境中虚拟机运行一段时间后数据量持续增长,磁盘分区都需要进行扩容,对于Windows系统相对简单,在磁盘瘦格式的状态下直接修改虚拟机磁盘大小,在系统中的磁盘管理里扩展分区即可,实时生效连重启都免了。而Linux操作起来就比较麻烦,利用卷组管理的可以直接添加虚拟磁盘并扩展逻辑卷,但是如果...
从中科红旗到deepin(深度),国产操作系统道阻且长
提到国产操作系统,我们就不得不提中科红旗。红旗曾是国产操作系统的主要推动者之一。然而,2014年中科红旗开始公开转让全部注册商标及软件著作权等资产,这意味着这家曾以研发出红旗Linux国产OS而闻名的公司宣告破产。 事实上,国家对国产软件的采购支持是相当给力的。中科红旗的主打产品红旗Linux早在十几年...
Windows下安装Docker
放在三年前,你不认识Docker情有可原,但如果现在你还这么说,不好意思,只能说明你OUT了,行动起来吧骚年,很可能你们公司或者你即将要去的公司,或者你想去的公司很可能就会引入Docker,或者已经引入了Docker。 Docker的前身是名为dotCloud的小公司,主要提供的是基于 PaaS(Platform as a Service,平台及服务)平台为开发者或开发商提供技术服务,并提供...
GParted 动态调整Linux分区大小 | 奋斗博客
在虚拟化环境中虚拟机运行一段时间后数据量持续增长,磁盘分区都需要进行扩容,对于Windows系统相对简单,在磁盘瘦格式的状态下直接修改虚拟机磁盘大小,在系统中的磁盘管理里扩展分区即可,实时生效连重启都免了。而Linux操作起来就比较麻烦,利用卷组管理的可以直接添加虚拟磁盘并扩展逻辑卷,但是如果...
从中科红旗到deepin(深度),国产操作系统道阻且长
提到国产操作系统,我们就不得不提中科红旗。红旗曾是国产操作系统的主要推动者之一。然而,2014年中科红旗开始公开转让全部注册商标及软件著作权等资产,这意味着这家曾以研发出红旗Linux国产OS而闻名的公司宣告破产。 事实上,国家对国产软件的采购支持是相当给力的。中科红旗的主打产品红旗Linux早在十几年...
Windows下安装Docker
放在三年前,你不认识Docker情有可原,但如果现在你还这么说,不好意思,只能说明你OUT了,行动起来吧骚年,很可能你们公司或者你即将要去的公司,或者你想去的公司很可能就会引入Docker,或者已经引入了Docker。 Docker的前身是名为dotCloud的小公司,主要提供的是基于 PaaS(Platform as a Service,平台及服务)平台为开发者或开发商提供技术服务,并提供...
全部评论
🔥 Clown LV.2 2楼
表示还是不太会用。
2天前1
雅枫 LV.1 3楼
要补全,还得fish或者zsh,bash默认弱了些
2天前
誰かWieアホ LV.4 4楼
虽然现在还看不懂,
但还是顶你
2天前
Lonely LV.1 土豪 5楼
支持一下
2天前
DF-21 D LV.1 6楼
zsh杀天下
2天前
牧民 LV.1 7楼
哟呵发帖了还是大酋长

我的更多文章

下载客户端阅读体验更佳

APP专享