1.给自定义脚本创建软连接

ln -s myscript.sh /usr/bin/myscript

2.创建tab补全脚本

vim /usr/share/bash-completion/completions/myscript
#!/bin/bash
# 定义所有服务列表
services=("demo1" "demo2" "demo3")

# 添加 "all" 选项到服务列表中,仅限于 start, stop, restart, status 命令
all_services=("${services[@]}" "all")

_myscript_sh()
{
  local cur prev cmd
  COMPREPLY=()
  cur="${COMP_WORDS[COMP_CWORD]}"
  prev="${COMP_WORDS[COMP_CWORD-1]}"
  cmd="${COMP_WORDS[1]}"

  case "$cmd" in
    start|stop|restart|status)
      # 对于 start, stop, restart, status 命令,使用包含 "all" 的服务列表
      COMPREPLY=( $(compgen -W "${all_services[*]}" -- ${cur}) )
    ;;
    log)
      # 对于 log 命令,使用原始的服务列表
      COMPREPLY=( $(compgen -W "${services[*]}" -- ${cur}) )
    ;;
    *)
      # 如果没有识别到命令,则提供 start, stop, restart, status, log 的补全
      COMPREPLY=( $(compgen -W "start stop restart status log" -- ${cur}) )
    ;;
  esac
 }

complete -F _myscript_sh myscript
# 此处_myscript_sh是当前脚本函数名, myscript为自定义脚本名

3.增加执行权限,立即生效

chmod +x /usr/share/bash-completion/completions/myscript-completion.bash
source /usr/share/bash-completion/completions/myscript-completion.bash

注意:自定义脚本名称必须和命令名称保持一致,否则自定义脚本无法加载成功。