Shell自动化Tab键补全脚本
简介
本文介绍了在 Bash shell 中如何实现脚本自动化补全的功能,并给出了一个实例代码。
背景
在使用命令行操作系统时,我们经常需要在终端中输入命令来操作系统或者应用程序。当我们的输入命令越来越复杂时,我们往往会遇到诸如命令拼写错误、命令参数不正确等问题。而脚本自动化补全可以帮助我们避免这类问题的发生。
实现过程
脚本自动化补全的实现依赖于 Bash shell 的自动化补全功能。自动化补全功能的实现需要做两件事:
定义自动化补全函数,即在输入命令时,根据当前输入的字符串,返回匹配的命令或参数列表;
将自动化补全函数与对应的命令关联起来,使得在输入该命令时,能够使用自动补全功能。
下面以脚本自动化补全代码为例,说明如何实现自动化补全功能。
默认情况下,Bash shell 自动补全功能是开启的。可以通过以下命令查看 Bash shell 自动补全功能的状态:
echo $BASH_VERSION
complete -p | grep -e 'm$'
其中,如果输出结果中包含 m 的信息,则说明 m 命令的自动补全功能已经被关联。
接着,我们可以在 ~/.bashrc 文件中添加以下代码,启用 m 命令的自动补全功能:
export PATH=$PATH:~/bin
# _m 是 Bash shell 补全功能的函数名称
function _m() {
local cur=${COMP_WORDS[COMP_CWORD]}
local prev=${COMP_WORDS[COMP_CWORD-1]}
local opts="-h --help"
local LIST=($(ls -d ${HOME}/* | awk -F/ '{print $(NF-1)}'))
if [[ ${cur} == * ]]; then
COMPREPLY=($(compgen -W "$(echo ${LIST[@]} | tr ' ' '\n' | grep ^${cur})" -- ${cur}))
else
COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
fi
return 0
}
# 将补全函数关联到 m 命令上
complete -F _m m
其中,脚本 m 存在于 ~/bin 目录下,因此需要将 ~/bin 加入到 $PATH 环境变量中。并且,在 ~/.bashrc 文件中定义了自动补全函数 _m,该函数根据输入的字符串,返回匹配的命令或参数列表。最后,在文件的结尾使用 complete 命令,将函数 _m 与命令 m 关联。
激活配置
执行以下命令以重新加载 Shell 配置文件:
source ~/.bashrc
或者,如果您使用的是 ~/.bash_profile,则使用以下命令:
source ~/.bash_profile
这些步骤应该能够解决这个问题,并使 box.sh 脚本正常工作。
使用方法
在命令行中输入 m 命令后,根据输入的字符串,自动显示匹配的命令或参数。特别地,当输入的字符串为空时,显示所有可以使用的参数(即 -h 和 --help)。
下图展示了在输入 m 命令后,使用自动化补全功能,自动显示了所有匹配的命令或参数列表:
hostname:~$ m <Tab>
Display all 294 possibilities? (y or n)
file1 ...file249
hostname:~$ ls ~
file1 ...file249
总结
脚本自动化补全可以帮助我们提高命令行操作系统的使用效率,避免因输入错误导致的问题。同时,它也提供了一种实现自动化补全的方法,为我们后续进行自动化操作奠定了基础。