Skip to content

v0.1.8 — aivet update:自己换掉自己

Choose a tag to compare

@shiftu shiftu released this 28 Aug 11:43
· 4 commits to main since this release

以前升级只有一条路:再跑一遍 install.sh。那是「装」不是「升」,用户得记住那行 curl。

现在 aivet update 就够了 —— 从 GitHub release 下当前平台的二进制,用它换掉正在跑的这个,下载时有进度条。

 … aivet_darwin_arm64  ▕████████████░░░░░░░░░░░░▏  47%  3.5 MB/7.4 MB  627.8 KB/s
 ✔ 校验和对上了 c5bf1d2c0c2bc1be…
 ✔ 已更新 v0.1.7 → v0.1.8  ·  ~/.local/bin/aivet

管道 / CI / 重定向到文件时一个 \r 都不出(那几百行刷屏是垃圾不是动效),只留一行结果;服务器不给 Content-Length 就退化成转圈 + 已下字节;ASCII 终端换成 [####....]。

这是在往你机器上放一个会被直接执行的文件,所以:

  • 发布时一起传的 SHA256SUMS 是必对的一环。没有它、或者对不上,一律删掉不装。跳过校验的自更新等于给自己开了一条后门。
  • 顺序是先判断、再下载、下完先校验、最后才碰目标文件 —— 任何一步失败,你手里那个 aivet 都还是完好的。
  • 换的动作是同目录 rename,原子的,不会留下半个文件。Windows 覆盖不了正在跑的 exe,先把旧的挪成 .old,放不进去再挪回来。
  • aivet 要是个软链(brew、~/bin 里手工链的),换的是它指向的那个,不会把链接本身变成真文件。
  • 装在需要 root 的目录里时提示你用 sudo 重跑,aivet 不自己提权。

用法

aivet update                    有新版就装上
aivet update --check            只看,什么都不动
aivet update --version v0.1.6   退回某个版本
aivet update --force            版本一样也重装

用 brew 之类装的,更新交给它,别用这个。

装:

curl -fsSL https://raw.githubusercontent.com/shiftu/aivet/main/install.sh | bash