文章目录
- 你编写了一个脚本 deploy.sh,支持以下参数: –env dev | prod –action build | deploy | rollback 希望在输入时支持自动补全。
- 编写补全函数: _deploy_completion() { local cur prev opts COMPREPLY=() cur=”${COMP_WORDS[COMP_CWORD]}” prev=”${COMP_WORDS[COMP_CWORD-1]}” case “${prev}” in –env) COMPREPLY=( $(compgen -W “dev prod” — ${cur}) ) return 0 ;; –action) COMPREPLY=( $(compgen -W “build deploy rollback” — ${cur}) ) return 0 ;; *) opts=”–env –action” COMPREPLY=( $(compgen -W “${opts}” — ${cur}) ) return 0 ;; esac } 注册补全函数: complete -F _deploy_completion deploy.sh 使用方式: $ deploy.sh –env <Tab> dev prod $ deploy.sh –action <Tab> build deploy rollback
目录
- 一、前言
- 二、什么是 Bash 自动补全?
- 三、Bash 自动补全的类型
- 四、基本使用方法
- ✅ 1. 命令自动补全
- ✅ 2. 文件/目录自动补全
- ✅ 3. 参数自动补全(需安装 bash-completion)
- 五、启用 bash-completion 扩展功能
- ✅ 安装方法(以 Ubuntu/Debian 为例):
- 六、自定义命令补全规则
- ✅ 示例:为mycmd命令添加补全选项
- ✅ 示例:为myscript.sh添加文件补全
- 七、常用快捷键与技巧
- 八、实战案例:为自定义脚本添加智能补全
- 📌 需求背景:
- ✅ 实现步骤:
- 九、常见问题与解决方案
- 十、总结对比表:Bash 自动补全功能一览
- 十一、结语
在 Linux Shell 编程和日常使用中,Bash 的自动补全功能 是一个非常强大且实用的特性。它不仅可以节省输入时间,还能有效减少拼写错误,提升命令执行效率。
本文将带你全面了解 Bash 的自动补全机制,包括:
✅ 命令自动补全
✅ 文件路径自动补全
✅ 自定义命令补全规则
✅ 使用 bash-completion 扩展补全功能
✅ 实用技巧与快捷键
✅ 实战案例:为自定义脚本添加补全支持
✅ 常见问题与解决方案
并通过完整示例帮助你快速掌握 Bash 自动补全的使用与配置。
Bash 自动补全(Tab Completion) 是 Bash Shell 提供的一项功能,允许用户在输入命令、路径、参数等内容时,通过按下 Tab 键自动补全剩余部分。
它极大地提升了命令行的使用效率,尤其在处理长文件名、复杂命令或路径时非常实用。
| 类型 | 描述 | 示例 |
|---|---|---|
| 命令补全 | 补全可执行命令名 | git<Tab> → git commit |
| 文件/目录补全 | 补全当前路径下的文件名 | cat fil<Tab> → cat filename.txt |
| 参数补全 | 补全命令支持的选项 | ls --<Tab> → --help, --version |
| 自定义补全 | 用户自定义补全规则 | mycmd<Tab> → 自定义选项 |
$ gi<Tab>
如果系统中有 git 命令,按下 Tab 后会自动补全为:
$ git
如果存在多个匹配项(如 git 和 gimp),再按一次 Tab 将列出所有匹配项。
$ cat fil<Tab>
如果当前目录下有 filename.txt,则会补全为:
$ cat filename.txt
$ ls --<Tab>
将列出所有支持的选项,如:
--all --block-size --color --help --reverse
默认情况下,Bash 只支持基本的命令和文件补全。要启用更高级的参数补全功能(如 --help、--version 等),需要安装并启用 bash-completion 包。
sudo apt update
sudo apt install bash-completion
然后在 ~/.bashrc 中添加以下内容以启用补全:
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
最后刷新配置:
source ~/.bashrc
你可以使用 complete 命令为自定义脚本或命令添加自动补全规则。
假设你有一个脚本 /usr/local/bin/mycmd,支持以下参数:
start | stop | restart | status
你可以为其添加自动补全规则:
complete -W "start stop restart status" mycmd
现在输入:
$ mycmd s<Tab>
将自动补全为:
start status
complete -f myscript.sh
这样在输入:
$ myscript.sh fil<Tab>
将自动补全当前目录下的文件名。
| 快捷键 | 功能 | 说明 |
|---|---|---|
Tab |
单次补全 | 补全当前可识别的最长匹配 |
Tab Tab |
列出所有匹配项 | 显示所有可能的补全结果 |
Ctrl + x Ctrl + e |
编辑当前命令行 | 进入编辑模式修改命令 |
Alt + / |
扩展路径补全 | 递归向上补全路径 |
Esc * |
展开通配符 | 将 * 替换为所有匹配文件名 |
你编写了一个脚本 deploy.sh,支持以下参数:
--env dev | prod --action build | deploy | rollback
希望在输入时支持自动补全。
- 编写补全函数:
_deploy_completion() {
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
case "${prev}" in
--env)
COMPREPLY=( $(compgen -W "dev prod" -- ${cur}) )
return 0
;;
--action)
COMPREPLY=( $(compgen -W "build deploy rollback" -- ${cur}) )
return 0
;;
*)
opts="--env --action"
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
;;
esac
}
- 注册补全函数:
complete -F _deploy_completion deploy.sh
- 使用方式:
$ deploy.sh --env <Tab>
dev prod
$ deploy.sh --action <Tab>
build deploy rollback
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 按 Tab 无反应 | 未安装 bash-completion | 安装并启用 bash-completion |
| 补全不准确 | 未定义补全规则 | 使用 complete 或编写补全函数 |
| 多次 Tab 不显示列表 | 配置问题 | 检查 ~/.inputrc 或使用 set show-all-if-ambiguous on |
| 补全显示乱码 | 编码问题 | 设置 LANG=en_US.UTF-8 等环境变量 |
| 补全函数未生效 | 未 source 或函数错误 | 检查语法并重新 source |
| 特性 | 支持 | 说明 |
|---|---|---|
| 命令补全 | ✅ | 自动补全可执行命令 |
| 文件补全 | ✅ | 自动补全当前目录文件 |
| 参数补全 | ✅(需 bash-completion) | 补全命令支持的选项 |
| 自定义补全 | ✅ | 使用 complete 或函数定义 |
| 路径递归补全 | ✅(需 Alt+/) | 支持多级路径自动补全 |
| 通配符展开 | ✅(需 Esc *) | 展开通配符为具体文件名 |
到此这篇关于bash的特性-命令和文件自动补全的文章就介绍到这了,更多相关bash文件自动补全内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!
您可能感兴趣的文章:
- 如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)
- bat脚本启动git bash窗口,并执行命令方式
- -bash: docker-compose未找到命令的解决方案
- Shell脚本命令行批处理bash sh cmd bat函数极简学法
- bash shell 自定义函数命令持久化生效问题
- Bash中test命令的使用
- bash脚本中将密码传递给ssh/scp命令方法详解
- bash命令使用详解