码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【shell】linux通过complete命令完成使用tab键自动补全


    一、需求

           1、通过shell脚本完成一个linux命令,并在执行时可使用tab键补全命令和参数

           2、参数分为一级参数和二级参数,并针对不同的一级参数有二级参数

    二、实现方式

          通过complete,compgen,shift、eval等linux命令实现

         1、代码架构

               init.d : 命令逻辑实现

               test_complete : 命令主入口

              .test_complete.bash : 实现命令补全

         2、代码详情

          test_complete

    1. #!/bin/bash
    2. export TOP_BASE_PATH=`cd $(dirname $BASH_SOURCE); pwd`
    3. COMMAND=$1
    4. if [[ ! -f $TOP_BASE_PATH/init.d/$COMMAND ]];then
    5. echo "输入命令不存在"
    6. exit 1
    7. fi
    8. for cmd in `ls $TOP_BASE_PATH/init.d/`
    9. do
    10. eval "function $cmd {
    11. . $TOP_BASE_PATH/init.d/$cmd \$@
    12. }"
    13. done
    14. shift
    15. $COMMAND $@

      .test_complete.bash

    1. _do_completions() {
    2. . test_complete profile
    3. if [ $COMP_CWORD == 1 ]; then
    4. COMPREPLY=($(compgen -W "$(ls ${COMMAND_PATH} --hide profile --hide option)" "${COMP_WORDS[1]}"))
    5. elif [ $COMP_CWORD == 2 ]; then
    6. COMPREPLY=($(compgen -W "$(${COMMAND_PATH}/option ${COMP_WORDS[1]})" "${COMP_WORDS[2]}"))
    7. fi
    8. }
    9. complete -F _do_completions test_complete

         init.d 

    1. # cat init.d/profile
    2. #!/bin/bash
    3. export TOP_BASE_PATH=`cd $(dirname $BASH_SOURCE)/../.; pwd`
    4. export COMMAND_PATH=$TOP_BASE_PATH/init.d
    5. # cat init.d/option
    6. #!/bin/bash
    7. option=$1
    8. if [[ $option == "change" ]];then
    9. echo "a b c"
    10. fi
    11. # cat init.d/start
    12. #!/bin/bash
    13. echo "=====start====="
    14. # cat init.d/stop
    15. #!/bin/bash
    16. echo "=====stop====="
    17. # cat init.d/change
    18. #!/bin/bash
    19. pararm=$1
    20. echo "=====$pararm====="

    三,效果展示

    四、参考文档:

      shell编程-使用complete实现linux命令自动补全_wwwlyj123321的博客-CSDN博客_complete命令 

  • 相关阅读:
    gRPC入门
    Python自动化测试详解
    算法-打家劫舍
    python机器人编程——用python实现一个写字机器人
    Linux的指令和用途(持续更新)
    Go单元测试及框架使用
    一个斜杠引发的CDN资源回源请求量飙升
    基于(springmvc+tomcat+JavaScript)的收支管理MoneySSM系统
    R语言移除列表中的空元素(列表数据中包含NULL,移除NULL元素)、使用purrr包的compact函数删除NULL元素
    Unreal UnLua + Lua Protobuf
  • 原文地址:https://blog.csdn.net/qq_41982304/article/details/126157916
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号