Linux下命令补全工具bash

您所在的位置:网站首页 bash命令什么意思 Linux下命令补全工具bash

Linux下命令补全工具bash

2023-11-02 15:14| 来源: 网络整理| 查看: 265

Linux下超强的命令补全工具bash-completion

编写 Bash 补全脚本 参考URL: https://kodango.com/bash-competion-programming

在使用bash命令行时,在提示符下输入某个命令的前面几个字符,然后按下TAB键,就会列出以这几个字符开头的命令供我们选择。

自动补全这个功能是Bash自带的,但一般我们会安装bash-completion包来得到更好的补全效果,这个包提供了一些现成的命令补全脚本,一些基础的函数方便编写补全脚本,还有一个基本的配置脚本。

安装

yum install -y bash-completion 编写自动补全脚本

大致原理,一般会有一个名为bash_completion的脚本,这个脚本会在shell初始化时加载。如对于RHEL系统来说,这个脚本位于/etc/bash_completion,而该脚本会由/etc/profile.d/bash_completion.sh中导入

在bash_completion脚本中会加载/etc/bash_completion.d下面的补全脚本:

if [[ $BASH_COMPLETION_DIR != $BASH_COMPLETION_COMPAT_DIR && \ -d $BASH_COMPLETION_DIR && -r $BASH_COMPLETION_DIR && \ -x $BASH_COMPLETION_DIR ]]; then for i in $(LC_ALL=C command ls "$BASH_COMPLETION_DIR"); do i=$BASH_COMPLETION_DIR/$i [[ ${i##*/} != @(*~|*.bak|*.swp|\#*\#|*.dpkg*|*.rpm@(orig|new|save)|Makefile*) \ && -f $i && -r $i ]] && . "$i" done fi unset i

补全脚本的名称一般就是命令名,这样比较容易查找:

cd /etc/bash_completion.d [root@VM_0_14_centos bash_completion.d]# ls git iprutils redefine_filedir scl.bash yum-utils.bash 内置补全命令

Bash内置有两个补全命令,分别是compgen和complete。compgen命令根据不同的参数,生成匹配单词的候选补全列表,例如:

[root@VM_0_14_centos bash_completion.d]# compgen -W 'hi hello how world' h hi hello how

compgen最常用的选项是-W,通过-W参数指定空格分隔的单词列表。h即我们在命令行当前键入的单词,执行完后会输出候选的匹配列表,这里是以h开头的所有单词。

complete命令的参数有点类似compgen,不过它的作用是说明命令如何进行补全,例如同样使用-W参数指定候选的单词列表:

我们还可以通过-F参数指定一个补全函数:

$ complete -F _foo foo

现在键入foo命令后,会调用_foo函数来生成补全的列表,完成补全的功能,这一点正是补全脚本实现的关键所在。

demo:

#!/usr/bin/env bash _cli_bash_autocomplete() { local cur opts base; COMPREPLY=(); cur="${COMP_WORDS[COMP_CWORD]}"; opts=$( ${COMP_WORDS[@]:0:$COMP_CWORD} --generate-completion ); COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ); return 0; }; complete -F _cli_bash_autocomplete lotus

一般补全函数(这里_cli_bash_autocomplete)都会定义以下两个变量 cur 其中cur表示当前光标下的单词 opts 其中opts表示选项

初始化相应的变量后,我们需要定义补全行为,即输入什么的情况下补全什么内容。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3