首页 > 其他分享 >对bash脚本增加tab自动补全

对bash脚本增加tab自动补全

时间:2023-12-04 20:23:10浏览次数:32  
标签:git 补全 benchmark bench tab words bash

需求

高频使用自编benchmark工具,
希望能像原生命令一样tab补全。
要求:

  • 能够针对-s补全指定数据集名称
  • 能够针对-b补全分支名称(基于本地git仓库)
  • 能够补全-d -e -q等普通参数

实现

依赖

常见Linux发行版都内置了自动补全的依赖,以Ubuntu默认shell bash为例
如无法自动补全需要手动安装sudo apt install bash-completion

函数

系统的自动补全默认source ~/.bash_completion因此我们可以从这里入手
假设工具入口benchmark代码仓库地址$HOME/workspace/src/.git

function _bench()
{
  latest="${COMP_WORDS[$COMP_CWORD]}"
  prev="${COMP_WORDS[$COMP_CWORD - 1]}"
  words=""
  case "${prev}" in
    -s)
      words="Argoverse Waymo Kitti CityScapes"
      ;;
    -b)
      words=`git --git-dir=$HOME/workspace/src/.git for-each-ref --format='%(refname:short)' refs/heads/`
      ;;
    *)
      words="-b -d -e -q -s"
      ;;
  esac
  COMPREPLY=($(compgen -W "$words" -- $latest))
  return 0
}
complete -F _bench benchmark

生效

首次使用需要手动source ~/.bash_completion后续登陆则会自动生效

注意

  1. 函数中的*)一定要放再最后避免过度匹配无法进入其他逻辑
  2. 未将benchmark注册到$PATH最后一行可改为complete -F _bench ./benchmark
    同时为了避免其他路径的./benchmark激活补全需要再_bench()函数头部增加路径过滤
function _bench()
{
  full_path=`realpath ${COMP_WORDS[0]}`
  if [ $full_path != "/path/to/your/script/benchmark" ];then
    # not in desire path, do nothing
    return 0
  fi
...
}
complete -F _bench ./benchmark

效果

$ ./test_entrance.sh -[Tab]
-b  -d  -e  -q  -s  
$ ./test_entrance.sh -s [Tab]
Argoverse   Waymo   Kitti   CityScapes
$ ./test_entrance.sh -s Waymo -b [Tab]
bugfix/xxxxx/bad_vx       bugfix/yyyyyyyy/crossing        feature/zzz/enable_dnn
master                    develop                         hotfix/zzz/Asan
$ ./test_entrance.sh -s Waymo -b master -q

参考

Shell Auto Completion in Linux | Baeldung on Linux
git pull while not in a git directory - Stack Overflow

标签:git,补全,benchmark,bench,tab,words,bash
From: https://www.cnblogs.com/azureology/p/17875862.html

相关文章

  • Eclipse SWT table 实现编辑功能
    table_2.addMouseListener(newMouseAdapter(){//给需要编辑的表格增加监听 @Override publicvoidmouseDoubleClick(MouseEvente){//鼠标双击时触发 if(table_2.getSelectionCount()!=0){ finalTableItemitem=table_2.getItem(table_2.getSelectionInd......
  • 小程序上实现tab标签的变化
    小程序上想要实现成点击标签跳转某标签,在标签内滚动时随着超过滚动内容tab选中态变化。借助了@vant/weapp框架index.wxml<viewclass="list-page"><van-tabsstickyactive="{{active}}"bind:click="onHangeActive"bind:scroll="onScrollHeight&q......
  • 98、swift--- tableView.dequeueReusableCell(withIdentifier: cellID, for: indexPat
    作用:复用cell.可以用标识符从表视图中获得可重用单元格.for:indexPath通过指定单元格位置获得可重用单元格,不需要判断.用于dequeue(出队)一个可复用的cell,用于在UITableView或UICollectionView中显示。这个方法接收两个参数:withIdentifier:一个字符串,表示要dequeue的......
  • 掌握这些,轻松管理BusyBox:inittab文件的配置和作用解析
    BusyBox是一个轻量级的开源工具箱,其中包含了许多标准的Unix工具,例如 sh、ls、cp、sed、awk、grep 等,同时它也支持大多数关键的系统功能,例如自启动、进程管理、启动脚本等等。而 inittab 文件则是BusyBox中的一个重要文件,掌握了 inittab 文件的作用及如何配置有助于更好......
  • Mysql: [HY000][1093] You can't specify target table 'dupes' for update in FROM c
    错误原因在同一语句中。不能先SELECT出同一表的某些值,在Update这个表实例错误实例DELETEFROMdupesWHEREidNOTIN(SELECTMIN(id)FROMdupesGROUPBYname)正确实例DELETEFROMdupesWHEREidNOTIN(SELECT*FROM(SELECTM......
  • 初中英语优秀范文100篇-016An unforgettable Trip-一次难忘的旅行
    PDF格式公众号回复关键字:SHCZFW016记忆树1Lastyear,Iwenttomyfavoritecity,Beijing.翻译去年,我去了我最喜欢的城市,北京简化记忆城市句子结构这个句子可以分析为一个复合句,由主句和从句构成。主句是“Iwenttomyfavoritecity,Beijing”,主语是“I”......
  • 前端组件wolfTable的style格式文档
    此文档记录的是wolf-table的style格式文档,如果你找的是x-data-spreadsheet,那么请查阅这个文档https://www.cnblogs.com/WilsonZhu/p/17858411.htmlwolf-table的格式输入只有一个方式,通过调用addStyle以及cell函数来进行格式的改变例子如下:importTablefrom'@wolf-table......
  • Minitab 2021:让数据分析更简单、更高效
    Minitab2021是一款广泛应用于统计分析、数据管理和质量改进的软件。作为一款全球领先的统计分析管理软件,它为用户提供了全面而高效的数据分析工具,适用于各种行业和领域。点击获取MinitabMinitab2021具有强大的数据处理和分析能力,可以进行各种统计分析、回归分析、实验设计、......
  • 17、Flink 之Table API: Table API 支持的操作(2)
    文章目录Flink系列文章一、TableAPI介绍6、表的union、unionall、intersect、intersectall、minus、minusall和in的操作7、表的OrderBy,Offset和Fetch操作8、表的insert操作9、GroupWindows1)、Tumble(TumblingWindows)2)、Slide(SlidingWindows)3)、Session(SessionWind......
  • 如何将 sap.ui.Table 控件的背景设置成透明
    笔者曾经写过一篇文章,介绍了如何在SAPUI5应用里设置背景图片:下图1是背景图片,图2是把这个背景图片加到SAPUI5应用之后的效果。https://blog.csdn.net/i042416/article/details/134643986后来有朋友追问:如果我的SAPUI5应用里使用的表格控件,没有用响应式表格sap.m.Tab......