热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux补全参数的命令,自定义linux命令参数补全以提高工作效率

我们在使用bash命令时,会经常使用二次tab键进行补齐。例如我们常用的telnet命令,在输入二次tab键时,会列出当前系统配置的所有主

我们在使用bash命令时,会经常使用二次tab键进行补齐。

例如我们常用的telnet命令,在输入二次tab键时,会列出当前系统配置的所有主机名,供选择

# 输入 telnet

[huangcihui:/home/huangcihui] telnet

::1 localhost localhost4 localhost4.localdomain4 localhost6 localhost6.localdomain6 localhost.localdomain

[huangcihui:/home/huangcihui] telnet

在输入telnet参数过程中按回车,系统也会自动补全主机名

#输入 telnet l

[huangcihui:/home/huangcihui] telnet localhost

其它常用命令,也会有这个功能。 例如systemctl,输入二次tab键时会列出systemctl所有子命令参数

#systemctl

[huangcihui:/home/huangcihui] systemctl

add-requires daemon-reexec enable hybrid-sleep kill list-units reload-or-restart set-property suspend

add-wants daemon-reload exit is-active link mask reload-or-try-restart show switch-root

cancel default force-reload is-enabled list-dependencies poweroff rescue show-environment try-restart

cat delete get-default is-failed list-jobs preset reset-failed snapshot unmask

condreload disable halt isolate list-sockets reboot restart start unset-environment

condrestart edit help is-system-running list-timers reenable set-default status

condstop emergency hibernate kexec list-unit-files reload set-environment stop

[huangcihui:/home/huangcihui] systemctl

那么,自己开发的程序,能不能实现tab自动补全? 答案是肯定的,借助bash的complete命令即可。

假设我们新写了一个命令叫tel,我们想让它实现telnet的被全主机名功能,用这个命令即可:complete -a hostname tel 效果如下:

[huangcihui:/home/huangcihui] complete -a hostname tel

[huangcihui:/home/huangcihui] #tel l

[huangcihui:/home/huangcihui] tel localhost

而像systemctl这种补全子命令的功能,要怎么做呢? 下面我演示一下怎么让git命令实现子命令补全功能

[huangcihui:/home/huangcihui] complete -w "add checkout clone commit diff pull push status" git

[huangcihui:/home/huangcihui] #git

[huangcihui:/home/huangcihui] git

add checkout clone commit diff pull push status

[huangcihui:/home/huangcihui] git

complete还有更多复杂的用法,有兴趣可以参考这篇文章

https://blog.csdn.net/koprvhdix/article/details/81036240

linux shell 命令自动补全(各方资料汇总补全版) clockworkai

下面是我使用complete命令帮我自定义的dockerq命令进行自动补全的函数

# 新建一个命令dockerq 用于快速操作docker

__dockerq()

{

compreply=() # 清空候选列表

local cur=${comp_words[comp_cword]}; # 用户输入单词赋值给cur

local cmd=${comp_words[comp_cword-1]}; # 用户正在操作的命令或者子命令

case $cmd in

'dockerq')

# 获取docker所有命令

# local cmdlist=$(docker --help|awk '{if ($1 == "commands:") { v_showflag = 1; next; } else if ($1 == "") v_showflag = 0; if (v_showflag) print $1;}')

cmdlist="images pull start run"

# 获取以cul开头的所有命令

local wordlist="$(compgen -w "${cmdlist}" -- $cur)"

# 给候选列表赋值

compreply=( ${wordlist} ) ;;

'images')

#使用docker images获取所有镜像名称

local cmdlist=$(docker images|awk '{if (nr != 1) print $1;}')

# 获取以cul开头的所有命令

local wordlist="$(compgen -w "${cmdlist}" -- $cur)"

# 给候选列表赋值

compreply=( ${wordlist} ) ;;

'run')

#使用docker ps获取所有容器名称

local cmdlist=$(docker ps -a|awk '{if (nr != 1) print $nf;}')

# 获取以cul开头的所有命令

local wordlist="$(compgen -w "${cmdlist}" -- $cur)"

# 给候选列表赋值

compreply=( ${wordlist} ) ;;

'*')

;;

esac

if [[ "${comp_words[1]}" == "read" && ${comp_cword} -eq 2 ]]; then

local pro=($(pwd))

cd /data

compopt -o nospace

compreply=($(compgen -d -f -- $cur))

cd $pro

fi

return 0

}

complete -f __dockerq dockerq

alias dockerq=docker

使用dockerq命令时,按tab键可以自动补齐docker镜像或者容器的名称,非常方便

[root@localhost ~]# dockerq

images pull run start

[root@localhost ~]# dockerq run

adoring_wozniak charming_ptolemy composetest_web_1 determined_hodgkin exciting_cartwright hardcore_mestorf hungry_mclean mystifying_cohen nginx001 thirsty_franklin

alptest1 composetest_redis_1 cpu_set_demo example1 exp1 heuristic_cannon magical_cartwright nginx phpfpm thirsty_merkle

[root@localhost ~]# dockerq run ^c

[root@localhost ~]# dockerq images

abh1nav/dockerui composetest_web feisky/nginx mysql redis

alpine docker/compose feisky/php-fpm nginx todoapp

busybox dockerinpractice/dockerfile-from-image hello-world node ubuntu

centurylink/dockerfile-from-image dockerinpractice/docker-image-graph lukapeschke/dfa python wordpress

[root@localhost ~]# dockerq images

希望这篇文章对你有帮助。



推荐阅读
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 本文介绍了Python字典视图对象的示例和用法。通过对示例代码的解释,展示了字典视图对象的基本操作和特点。字典视图对象可以通过迭代或转换为列表来获取字典的键或值。同时,字典视图对象也是动态的,可以反映字典的变化。通过学习字典视图对象的用法,可以更好地理解和处理字典数据。 ... [详细]
  • angular.element使用方法及总结
    2019独角兽企业重金招聘Python工程师标准在线查询:http:each.sinaapp.comangularapielement.html使用方法 ... [详细]
  • struts2重点——ValueStack和OGNL
    一、值栈(ValueStack)1.实现类:OGNLValueStack2.对象栈:CompoundRoot( ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文详细介绍了PHP中与URL处理相关的三个函数:http_build_query、parse_str和查询字符串的解析。通过示例和语法说明,讲解了这些函数的使用方法和作用,帮助读者更好地理解和应用。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
author-avatar
jone
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有