shell脚本中自动获取 GitHub 最新版本号
条评论为了方便,偶尔写个小脚本,要取 GitHub最新版本号,可以通过 GitHub 提供的 API 完成。
获取Github最新版本
利用 GitHub API 获取最新 Releases 的版本号,以 iina 为例:
1 | wget -qO- -t1 -T2 "https://api.github.com/repos/lhc70000/iina/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g' |
或者借助第三方工具 jq :
1 | wget -qO- -t1 -T2 "https://api.github.com/repos/lhc70000/iina/releases/latest" | jq -r '.tag_name' |
代码解释
主字段
https://api.github.com/repos/lhc70000/iina/releases/latest 这里用的是 GitHub 的官方 API,格式为 https://api.github.com/repos/{项目名}/releases/latest 打开上述链接后,可见包含下述字段的内容:
1 | "html_url": "https://github.com/lhc70000/iina/releases/tag/v0.0.15.1", |
那么这里的 tag_name 后面的值就是我们所需要的东西。
wget 参数
wget -qO- -t1 -T2 ,在这里我们使用了 4 个参数,分别是 q , O- , t1 , T2
-q:q就是quiet的意思了,没有该参数将会显示从请求到输出全过程的所有内容,这肯定不是我们想要的。-O-:-O是指把文档写入文件中,而-O-是将内容写入标准输出,而不保存为文件。(注:这里是大写英文字母O(Out),不是数字0)-t1: 设定最大尝试链接次数为1次,防止失败后反复获取,导致后续脚本无法执行。-T2: 设定响应超时的秒数为2秒,防止失败后反复获取,导致后续脚本无法执行。
筛选参数
jq -r '.tag_name':该命令需要先安装jq,.tag_name取得该键值,-r参数删除键值中的",更多可参考:常用 linux jq 命令语法整理grep "tag_name":grep是 Linux 一个强大的文本搜索工具,在本代码中输出tag_name所在行,即输出"tag_name": "v0.0.15.1",head -n 1:head -n用于显示输出的行数,考虑到某些项目可能存在多个不同版本的tag_name,这里我们只要第一个。awk -F ":" '{print $2}':awk主要用于文本分析,在这里指定:为分隔符,将该行切分成多列,并输出第二列。于是我们得到了(空格)"v0.0.15.1",sed 's/\"//g;s/,//g;s/ //g': 在这里sed用于数据查找替换,如sed 's/要被取代的字串/新的字串/g',因此本段命令可分为 3 个,以;分隔。s/\"//g即将"删除(反斜杠是为了防止引号被转义),以此类推,最终留下我们需要的内容:v0.0.15.1。
应用
还是以上面那个项目为例,提取版本号自然是想下载,其应用下载路径为:
1 | https://github.com/iina/iina/releases/download/v0.0.15.1/IINA.v0.0.15.1.dmg |
对比发现,我们只需要将版本号换成对应的变量即可:
1 | 定义版本变量 |
本文标题:shell脚本中自动获取 GitHub 最新版本号
文章作者:凹凸曼
发布时间:2021-03-15
最后更新:2021-03-15
原始链接:https://sobaigu.com/shell-get-lastest-version-from-github.html
版权声明:转载请务必保留本文链接和注明内容来源,并自负版权等法律责任。