You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何为自定义Shell脚本添加终端Tab自动补全功能

如何为自定义Shell脚本添加终端Tab自动补全功能

嘿,这个需求超实用!我来一步步教你实现,分两种常见场景覆盖——一种是直接执行脚本(比如敲git-feature.sh)的补全,另一种是用.(也就是source命令)执行脚本的补全,毕竟你例子里写了. git-feature.sh,两种情况我都给你安排明白。

场景一:直接执行脚本时的Tab补全(最常用)

其实这是bash自带的能力,只要做好这几步就能生效:

  • 给脚本加可执行权限:先给~/bin里的所有脚本加上执行权限,终端里跑这条命令就行:

    chmod +x ~/bin/*.sh
    

    只有加了执行权限,bash才会把它们当作可执行命令来识别。

  • 确认PATH配置生效:你已经把~/bin加到.bashrc里了(比如加了export PATH="$HOME/bin:$PATH"),可以重启终端或者执行source ~/.bashrc让配置立刻生效。

  • 开启bash命令补全功能:大部分系统默认已经开启,但保险起见,终端里执行:

    shopt -s progcomp
    

    现在测试一下:输入脚本的前几个字母(比如git-fe),按Tab键,应该直接补全成git-feature.sh了!如果生效,把这条命令也加到你的.bashrc里,以后每次开终端都会自动开启这个功能。

场景二:用.(source)命令执行脚本时的补全

如果你习惯用. git-feature.sh这种方式执行脚本,bash默认只会补全当前目录的文件,不会自动搜索~/bin。那我们可以自定义补全规则解决这个问题:

  1. 打开你的.bashrc文件:
    nano ~/.bashrc
    
  2. 在文件末尾添加这段自定义补全函数:
    # 为source命令补全~/bin下的.sh脚本
    _source_custom_sh() {
        local current_input="${COMP_WORDS[COMP_CWORD]}"
        # 从~/bin里筛选.sh文件,生成补全候选
        COMPREPLY=( $(compgen -f -X '!*.sh' -- "$HOME/bin/$current_input" | sed "s|$HOME/bin/||") )
    }
    # 把这个函数绑定到`.`命令上
    complete -F _source_custom_sh .
    
  3. 保存退出后,执行source ~/.bashrc让配置生效。

现在再测试:输入. git-fe然后按Tab,就会自动补全成. git-feature.sh,完全匹配你的需求!

备注:内容来源于stack exchange,提问作者Dreamer

火山引擎 最新活动