linux系统下怎么命令自动补全呢,下面是具体介绍。
输入“命令的前几个字符”,之后按TAB键即可自动补全。比如,想更改密码,但只记得这个命令前几个字母是pass。这时候,按Tab键,shell就自动输出 passwd 命令,十分方便。
拓展资料:
在shell命令行可以使用“Tab”键自动补全命令或文件名,这种功能其实可以在shell脚本中实现,使得使用“Tab”键可以自动补全自定义的shell函数,相关命令有三个,compgen、complete和compopt。
1、compgen:
compgen [option] [word]
compgen命令根据option生成与word可能匹配的补全,并打印到标准输出中,这些选项可以是内建命令complete所支持的任何选项,但不能是“-p”和“-r”,如果使用了“-F”或“-C”,则由可编程补全功能设置的各个shell变量虽然仍可以使用,但它们的值却没什么作用。补全条目以相同的方式生成,就好像可编程补全代码用相同的补全选项直接生成了补全条目一样,如果指定了word,则只显示与之匹配的条目。
2、complete:
complete [-abcdefgjksuv] [-o comp-option] [-DE] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] name [name ...]
complete -pr [-DE] [name ...]
complete命令指定如何对各个名称进行补全。如果指定了选项“-p”或者没有指定任何选项,则把已有的补全方法用一种可以重新作为作为输入的格式打印出来。选项“-r”用以删除指定名称的补全方法,不指定名称时删除所有的名称的补全方法。选项“-D”的意思是其后的选项和动作将应用到默认命令补全,也就是说之前未定义的补全命令也可以补全。选项“-E”的意思是其后的选项和动作将应用到空命令补全,也就是说补全空白行。对于选项“-G”、“-W”、“-X”、“-P”和“-S”,应该使用括号进行保护,防止补全开始前被扩展。
“-o bashdefault”:如果没有生成补全条目,就使用bash默认的其它补全。
“-o default”:如果没有生成补全条目,就使用“readline”默认的文件名补全。
“-o dirnames”:如果没有生成补全条目,就进行目录名补全。
“-o filenames”:告诉“readline”生成文件名,以便进行与文件名相关的处理,例如在目录名后面加上斜杠,引用特殊字符,去掉行尾的空格,目的是用于shell函数。
“-o noquote”:告诉“readline”不引用文件名,默认会进行引用。
“-o nospace”:告诉“readline”在补全的名称后不添加空格,默认添加空格。
“-o plusdirs”:生成补全条目之后,还会进行目录名补全并把结果添加到其它动作得到的结果中。
“-A alias”:别名,同选项“-a”。
“-A arrayvar”:数组变量名。
“-A binding”:“readline”键绑定名。
“-A builtin”:shell内建命令名,同选项“-b”。
“-A command”:命令名,同选项“-c”。
“-A directory”:目录名,同选项“-d”。
“-A disabled”:不可用的shell内建命令名。
“-A enabled”:可用的shell内建命令名。
“-A export”:导出的shell变量名,同选项“-e”。
“-A file”:文件名,同选项“-f”。
“-A function”:shell函数名。
“-A group”:组名,同选项“-g”。
“-A helptopic”:内建命令help支持的帮助主题。
“-A hostname”:主机名,从shell环境变量HOSTFILE中获取。
“-A job”:作业名,同选项“-j”。
“-A keyword”:shell保留字,同选项“-k”。
“-A running”:正在运行的作业名。
“-A service”:服务名,同选项“-s”。
“-A setopt”:内建命令set的选项“-o”可用的参数。
“-A shopt”:内建命令shopt可接受的选项名。
“-A signal”:信号名。
“-A stopped”:暂停的作业名。
“-A user”:用户名,同选项“-u”。
“-A variable”:所有的shell变量名,同选项“-v”。
“-C command”:在子shell中执行命令,并把其结果作为补全条目。
“-F function”:在当前的shell环境中执行函数function,执行时,参数“$1”表示那个参数正在进行补全的命令名,参数“$2”表示补全的名称,参数“$3”表示补全的名称前面的单词,表示结束执行时,从数组变量COMPREPLY中获取补全条目。
“-G globpat”:使用文件名扩展模式globpat进行扩展以生成可能的补全条目。
“-P prefix”:在所有的选项应用到补全结果后,在结果前添加前缀prefix。
“-S suffix”:在所有的选项应用到补全结果后,在结果后添加后缀suffix。
“-W wordlist”:使用特殊变量IFS中的字符拆分单词列表wordlist,并扩展拆分后的每个单词,结果中与待补全单词
匹配的条目就是补全条目。
“-X filterpat”:filterpat是进行文件名扩展时使用的模式,它作用于通过前面的选项和参数生成的补全列表,并把每个与过滤模式匹配的条目删除,模式中前导的叹号表示否定,这时会删除与过滤模式不匹配的条目。
3、compopt:
compopt [-o option] [-DE] [+o option] [name]
compopt命令修改每个名称指定的补全选项,如果没有指定名称则修改当前执行的补全的选项,如果也没有指定选项,则显示每个名称或当前补全所用的选项。选项可能的取值就是上面的内建命令complete的有效选项。
以上就是小编今天的分享了,希望可以帮助到大家。
Linux命令自动补全工具,自动补全git、Docker、k8s等命令
什么是命令自动补全
在 Linux 命令行中,当输入字符后,按Tab 键,Shell 就会列出以这些字符开头的所有可用命令,如果只有一个命令匹配到,按一次 Tab 键就自动将这个命令补全。
如果输入pass,此时按 Tab 键,因为以pass开头的命令只有passwd这个命令, Shell 就会自动补全 passwd 命令。
另外如果输入的字符匹配多个命令则会列出所有可用的命令,比如,如果输入do,此时按 Tab 键 Shell 就会自列出可用的命令。
[root@node2 ~]# do
do docker-containerd-shim dockerd done
docker docker-containerd-shim-current dockerd-current
docker-containerd docker-ctr-current docker-storage-setup
docker-containerd-current docker-current domainname
但是系统自带的命令补全功能有限,自动补全功能仅限于命令和文件名。
可以安装 Bash 命令补全增强软件包 bash-completion来实现更多命令的补全。
bash-completion的安装
以centos为例
[root@node1 ~]# cat /etc/redhat-Release
CentOS Linux release 7.7.1908 (Core)
直接通过yum命令安装
yum install bash-completion
bash-completion版本信息
[root@node1 completions]# rpm -qi bash-completion
Name : bash-completion
Epoch : 1
Version : 2.1
Release : 6.el7
Architecture: noarch
Install Date: Thu 19 Mar 2020 07:59:19 AM CST
Group : Unspecified
Size : 264934
License : GPLv2
Signature : RSA/SHA256, Fri 04 Jul 2014 08:47:01 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM : bash-completion-2.1-6.el7.src.rpm
Build Date : Tue 10 Jun 2014 08:05:27 AM CST
Build Host : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://bash-completion.alioth.debian.org/
Summary : Programmable completion for Bash
Description :
bash-completion is a collection of shell functions that take advantage
of the programmable completion feature of bash.
配置命令补全
source /usr/share/bash-completion/bash_completion
命令补全的脚本存放在/usr/share/bash-completion/completions/目录,可以在这个目录查看支持增强补全功能的命令。
再试试输入docker命令后按tab键:
[root@node1 completions]# docker
build diff history inspect logs port restart search stats top wait
commit events image kill network ps rm secret stop unpause
container exec images load node pull rmi service swarm update
cp export import login pause push run stack system version
create help info logout plugin rename save start tag volume
[root@node1 completions]# docker
可以看到后续可用命令的提示,妈妈再也不用担心我记不住命令了。
同样对于kubenetes也可以实现命令的自动补全和提示:
[root@node1 ~]# kubectl
annotate certificate cordon drain get port-forward run uncordon
api-versions cluster-info cp edit label proxy scale version
apply completion create exec logs replace set
attach config delete explain options rolling-update taint
autoscale convert describe expose patch rollout top
[root@node1 ~]# kubectl
git的命令补全
如果是在安装bash-completion之后安装git是不能自动命令补全,需要手动进行一些配置。
git安装之后文档里会有git-completion.bash文件
[root@node1 bash-completion]# find / -name git-completion*
/usr/share/doc/git-1.8.3.1/contrib/completion/git-completion.bash
/usr/share/doc/git-1.8.3.1/contrib/completion/git-completion.tcsh
/usr/share/doc/git-1.8.3.1/contrib/completion/git-completion.zsh
/usr/share/bash-completion/completions/git-completion.bash
/usr/share/git-core/contrib/completion/git-completion.tcsh
[root@node1 bash-completion]#
安装完git之后重新source一下bash-completion
source /usr/share/bash-completion/bash_completion
看看配置之后的效果
[root@node3 ~]# git
add cherry difftool init reflog show
am cherry-pick fetch log relink show-branch
annotate clean filter-branch merge remote stage
apply clone format-patch mergetool repack stash
archive column fsck mv replace status
bisect commit gc name-rev request-pull submodule
blame config get-tar-commit-id notes reset subtree
branch credential grep pull revert tag
bundle describe help push rm whatchanged
checkout diff imap-send rebase shortlog
[root@node3 ~]# git
如果觉得有用记得收藏点赞