complete 补全行为选项 命令名[4]
1.-F:执行指定函数名,候选结果保存在 COMPREPLY 数组变量里,补全功能更强大,可以实现命令参数补全,函数名在 /etc/bash_completion定义的。
complete -F my_complete_func my_cmd
2.-f:补全文件名,后可跟 -X 参数。
complete -f my_cmd
3.-X:过滤表达式,符合表达式的文件名会被排除,即不会在补全候选显示出来,如果以感叹号开头,则表示反转,即符合表达式的文件名才显示。
4.-o:补全类型,filenames 表示补全的是一个文件,跟 -f 参数使用才有效;其它值如dirnames 表示补全目录。
complete -o dirnames my_cmd
complete -o filenames -f my_cmd
5.查询当先实现的补全命令
complete
mac电脑案例一:
1.创建cpfrom文件(将文件中的内容复制到剪贴板)
#!/bin/bash
cat $1 | pbcopy
2.创建cpto文件(将剪贴板内容输出到文件)
#!/bin/bash
echo "$(pbpaste -Prefer text)" > $1
3.编辑~/.bash_profile
vim ~/.bash_profile
#添加一下内容给下面两个命令自动补全文件:
complete -f cpto
complete -f cpfrom
4.运行测试
#复制1.txt文件中的内容到粘贴板
cpfrom 1.txt
#输出粘贴板内容到2.txt
cpto 2.txt
案例二
1.编辑~/.bash_profile添加以下内容
complete -F copy_complete_func copy
copy_complete_func()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="help usage version"
if [[ ${cur} == * ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
}
2.创建copy文件
#!/bin/bash
echo "第一个参数为:$1";
a=$(cat $1)
echo $a
3.运行测试
copy help
参考链接
https://blog.csdn.net/Q1302182594/article/details/52344503
网友评论