10种有用的Linux Bash_Completion 命令示例
摘要:我们可以对这个 bash 补全进行加速,并使用 complete 命令将其提升到一个新的水平。
本文分享自华为云社区《有用的 Linux Bash_Completion 命令示例(Steroids 上的 Bash 命令行补全)》,作者:Tiamo_T 。
在 Linux 中,在键入命令时,如果按两次 TAB,它将列出所有以键入字符开头的可用命令。
这不是什么新鲜事,可能你已经知道了。此功能称为 bash 完成。默认情况下,基本文件和目录名称补全在 bash 命令行中可用。
但是,我们可以对这个 bash 补全进行加速,并使用 complete 命令将其提升到一个新的水平。
本教程解释了我们如何使用可编程完成将自动完成应用于选项和命令的参数。
例如,在输入 write 命令后,如果按两次 tab,自动补全会提供用户列表来执行 write 操作。
$ write [TAB][TAB]
bala raj
jason randy
john ritu
mayla thomas
nisha www-data
在以下示例中,它将显示 telnet 命令的可用主机名:
$ telnet [TAB][TAB]
localhost dev-db fileserver
要在终端中获得可编程完成,您只需要运行 /etc/bash_completion ,如下所示,
# . /etc/bash_completion
您还可以取消注释 /etc/bash.bashrc(来自 ubuntu linux 13.04)中的以下行,这样您就不必显式运行上述命令,
enable bash completion in interactive shells
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
如果你没有找到这些行和 /etc/bash_completion 文件,那么你只需要通过apt-get安装名为 bash_completion 的包
1.查看现有的bash-completion
启用可编程 bash 完成后,定义了一组 bash 完成。命令 complete 用于定义 bash 完成。
要查看现有的 bash 完成,请使用如下所示的 complete 命令。
complete -p | less
在上面的示例中,选项 -p 是可选的。
2. Bash 标准补全列表
Bash 默认为 Linux 用户提供以下标准补全。
- 变量名完成
- 用户名完成
- 主机名完成
- 路径名完成
- 文件名完成
我们在之前的bash 标准完成文章中讨论了这些内容。
3. 定义获取命令的完成
使用 -c 命令定义完成以获取可用命令列表作为参数。在以下示例中,完成是为哪个命令定义的,
$ complete -c which
$ which [TAB][TAB]
Display all 2116 possibilities? (y or n)
如上所示,通过按“y”,所有命令将被列出。
4. 定义获取目录的完成
使用选项 d,可以将完成定义为仅获取目录名称作为参数。在以下示例中,为 ls 定义了完成,
$ ls
countfiles.sh dir1/ dir2/ dir3/
$ complete -d ls
$ ls [TAB][TAB]
dir1/ dir2/ dir3/
如上所示,按 Tab 仅显示目录。
5. 定义获取后台作业名称的完成
使用完成,还可以获取作业名称作为命令的参数。选项 j 用于将作业名称作为参数传递给命令作业,如下所示,
$ jobs
[1]- Stopped cat
[2]+ Stopped sed 'p'
$ complete -j ./list_job_attrib.sh
$ ./list_job_attrib.sh [TAB][TAB]
cat sed
谈到后台作业,您还应该知道如何使用这些示例管理Linux 后台作业。
6. 前缀和后缀补全
可以使用要添加的所需前缀和要附加实际完成的后缀来定义完成。在以下示例中,为 list_job_attrib.sh 定义了前缀和后缀,
$ jobs
[1]+ Stopped cat
$ complete -P '">' -S '<"' ./list_job_attrib.sh
$ ./list_job_attrib.sh [TAB][TAB]
$ ./list_job_attrib.sh ">cat<"
7. 文件名和目录完成与排除
考虑脚本完成运行,输出被写入输出目录,如下所示
$ cd output/
$ ls
all_calls.txt incoming_calls.txt outgoing_calls.txt missed_calls.txt
parser_mod.tmp extract.o
在上面,如果您需要忽略 .tmp 和 .o 文件以使用 ls 命令自动完成,那么,
$ export FIGNORE='.tmp:.o'
$ complete -f -d ls
$ cd output
$ ls [TAB][TAB]
all_calls.txt incoming_calls.txt outgoing_calls.txt missed_calls.txt
FIGNORE 是包含文件名后缀的 shell 变量,这些后缀在自动完成中被排除。
8. 通过 IFS 拆分字符串以获得完成值
可以使用 -W 选项提及单词列表,并使用 IFS 变量中的值进行拆分。然后每个结果单词都被扩展并显示为完成,
$ export IFS=" "
$ complete -W "bubble quick" ./sort_numbers.sh
$ ./sort_numbers.sh [TAB][TAB]
bubble quick
如上所述,通过IFS分隔符分割字符串后,单词得到扩展,因此也可以将这些作为变量,如下所示,
$ echo $SORT_TYPE1
bubble
$ echo $SORT_TYPE2
quick
$ complete -W "$SORT_TYPE1 $SORT_TYPE2" ./sort_numbers.sh
$ ./sort_numbers.sh [TAB][TAB]
bubble quick
9. 编写你自己的函数来生成完成
它允许您包含一个函数来定义完成。使用 -F 选项,传递给完成命令的函数名称并被执行以生成完成。例如,函数编写如下所示,
_parser_options()
{
local curr_arg;
curr_arg=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen -W '-i --incoming -o --outgoing -m --missed' -- $curr_arg ) );
}
在上述函数中,
- COMPREPLY :数组保存按 [TAB][TAB] 后显示的完成结果
- COMP_WORDS :在命令行上键入的单词数组
- COMP_CWORD :COMP_WORDS 数组的索引,并且可以在命令行上使用此不同位置的单词进行访问。
- compgen : -W 保存可能的完成,并根据 $current_arg 选择相应的参数
文件 parser_option 中存在的此函数的来源如下所示,
$ source parser_option
将此函数链接到您的解析器脚本,如下所示,
$ complete -F _parser_options ./parser.pl
$ ./parser.pl [TAB][TAB]
-i --incoming -o --outgoing -m --missed
如上所示,解析器的选项由函数 _parser_options() 生成。
注意:查看 /etc/bash_completion 以查看可编程完成的更多功能。
10. 当主要不生成任何辅助规范时
如果定义的完成规范没有生成匹配项,则使用 comp-option 来完成 -o 选项提到的完成。
$ complete -F _count_files -o dirnames ./countfiles.sh
如上所述,完成是用文件 ./countfiles.sh 的 _count_files 函数定义的。如果 _count_files() 函数未生成任何匹配项,则尝试完成目录。
$ ls
countfiles.sh dir1/ dir2/ dir3/
$./countfiles.sh [TAB][TAB]
dir1 dir2 dir3
10种有用的Linux Bash_Completion 命令示例的更多相关文章
- 妈咪,我找到了! -- 15个实用的Linux find命令示例
妈咪,我找到了! -- 15个实用的Linux find命令示例 英文原文:Mommy, I found it! — 15 Practical Linux Find Command Examples ...
- 30个实用的Linux find命令示例
除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易. 本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令. 首先,在你 ...
- 15个实用的Linux find命令示例(一)
除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易. 本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令. 首先,在你 ...
- <转>13个实用的Linux find命令示例
注:本文摘自青崖白鹿,翻译的妈咪,我找到了! -- 15个实用的Linux find命令示例, 感谢翻译的好文. 除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作, ...
- 13个实用的Linux find命令示例
除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易. 本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令. 首先,在你 ...
- 爹地,我找到了!,15个极好的Linux find命令示例
爹地,我找到了!, 15个极好的Linux find命令示例 英文原文:Daddy, I found it!, 15 Awesome Linux Find Command Examples 标签: L ...
- 15个极好的Linux find命令示例(二)
前阵子,我们审查了15件实事 find命令的例子(第一部分).查找命令可以做很多比只是在寻找基于名称的文件 (第2部分)在这篇文章中,让我们来讨论15高级find命令的例子, 包括-根据它访问,修改或 ...
- 爹地,我找到了!15个极好的Linux find命令示例
爹地,我找到了!15个极好的Linux find命令示例 http://blog.jobbole.com/48931/ 妈咪,我找到了!15个实用的Linux find命令示例 http://blog ...
- 15个实用的Linux find命令示例
妈咪,我找到了! -- 15个实用的Linux find命令示例 http://www.oschina.net/translate/15-practical-linux-find-command-ex ...
随机推荐
- 拭目以待!JNPF .NET将更新.NET 6技术,同时上线 3.4.1 版本
2022年5月30日,福建引迈即将上线JNPF开发平台的.NET 6版本,在产品性能上做了深度优化,且极大的提升了工作效率,加强了对云服务的改进升级,全面提升用户的使用体验. JNPF是一个以PaaS ...
- 支付宝开放平台--网页&移动应用(一)
前提是先在支付宝上签约自己需要的支付宝功能,然后支付宝开放平台才能设置你需要的功能 一:支付宝开放平台登录 登录进入支付宝开放平台 二:根据自己的需求创建应用(我是用的网页&移动应用) 三:点 ...
- 24.Haproxy搭建Web群集
Haproxy搭建Web群集 目录 Haproxy搭建Web群集 Haproxy简介 常见的Web集群调度器 软件类 硬件类 Haproxy应用分析 HAProxy的主要特性 HAProxy常见的8种 ...
- JS:条件语句3
1.while while 语句只要指定条件为 true,就会执行循环. 语法: while(条件){ 语句: } 例: var i = 0; while (i < 5) { console.l ...
- openssl客户端编程:一个不起眼的函数导致的SSL会话失败问题
我们目前大部分使用的openssl库还是基于TLS1.2协议的1.0.2版本系列,如果要支持更高的TLS1.3协议,就必须使用openssl的1.1.1版本或3.0版本.升级openssl库有可能会导 ...
- FS2K人脸素描属性识别
人脸素描属性识别 代码:https://github.com/linkcao/FS2K_extract 问题分析 需要根据FS2K数据集进行训练和测试,实现输入一张图片,输出该图片的属性特征信息,提取 ...
- Spring Data JPA系列5:让IDEA自动帮你写JPA实体定义代码
大家好,又见面了. 这是本系列的最后一篇文档啦,先来回顾下前面4篇: 在第1篇<Spring Data JPA系列1:JDBC.ORM.JPA.Spring Data JPA,傻傻分不清楚?给你 ...
- python:**也不过如此嘛,这不也被我采集下来啦~
前言 嗨喽!大家好呀,这里是小熊猫 知识点: 基本流程 fiddler抓包 开发环境: python 3.8 运行代码 pycharm 2021.2 辅助敲代码 requests 第三方模块 如果安装 ...
- 查询效率提升10倍!3种优化方案,帮你解决MySQL深分页问题
开发经常遇到分页查询的需求,但是当翻页过多的时候,就会产生深分页,导致查询效率急剧下降. 有没有什么办法,能解决深分页的问题呢? 本文总结了三种优化方案,查询效率直接提升10倍,一起学习一下. 1. ...
- 《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(2)-初识Fiddler让你理性认识一下
1.前言 今天的理性认识主要就是讲解和分享Fiddler的一些理论基础知识.其实这部分也没有什么,主要是给小伙伴或者童鞋们讲一些实际工作中的场景,然后隆重推出我们的猪脚(主角)-Fiddler. 1. ...