接口变动

近期已升级至 v3 版本,文章内容已更新。

细心的朋友可能会发现,我提供的一些脚本都可以在不依赖任何包管理工具的情况下通过一行命令安装,并且它们的安装命令极为相似:

curl -s https://sh.xaox.cc/install | sh -s hexo
curl -s https://sh.xaox.cc/install | sh -s tag
curl -s https://sh.xaox.cc/install | sh -s vimcn
curl -s https://sh.xaox.cc/install | sh -s podspec

虽然它们安装方式极为相似,但是安装逻辑却并非完全相同,例如前三者是安装到 /usr/local/bin/ 目录下,在任意位置打开终端都可以使用,而 podspec.sh 则是下载到当前目录下。

如果打开 https://sh.xaox.cc/install 文件,你会发现它并没有做任何实质性的操作,只是负责任务派发,根据不同的参数把「安装」指令指派给不同的项目,不同的项目对「安装」的具体实现可以相同也可以不同。

对于相同的部分,以 vimcn 为例,它的 index.sh 实现如下:

#!/bin/sh
# 这个脚本负责下载和安装的逻辑

# function lib
lib='https://sh.xaox.cc/lib/v3'
# repository name
REPO='vimcn'
# clint file name
TARGET='cli.sh'
# clint file name
RENAME='upload'
# download version
VERSION=$1
if [ "$VERSION" = "" ];then
VERSION='main'
fi

on_success() {
doc_url=xxx
printf "\n> \033[32m恭喜您,安装成功!\033[0m 请收藏这个页面,在您遇到问题的时候可以查看文档:\n${doc_url}\n\n"
}

curl -s ${lib}/download.sh | sh -s ${REPO} ${VERSION} ${TARGET} &&
curl -s ${lib}/install.sh | sh -s $HOME/Downloads/${TARGET} ${RENAME} && on_success

从中可以看到它导入了一个「库」,确切的说是一个存放可复用代码的仓库地址,具体的「下载」与「安装」脚本像独立组件一样可供外部调用。与此例不同的 podspec.sh 脚本就只有下载操作:

curl -s ${lib}/download.sh | sh -s ${REPO} ${VERSION} ${TARGET} ./ &&
chmod 777 ${TARGET} && on_success

易于扩展

这么一套流程使得脚本安装变得非常有扩展性,如果需要发布一个新的脚本,只需要新建仓库,在其中写一个 index.sh 脚本,通过调用 lib 仓库里封装好的脚本,传入仓库名、版本、要下载的文件,就可以轻松实现下载安装流程。

易于使用

更重要的是,可以通过一行命令来安装:

curl -s https://sh.xaox.cc/install | sh -s 我的脚本

这套体系类似于包管理工具一样,但目前只对创建在 @cloud-shell-lib 中的仓库有效。

总结

就是一个比包管理工具更轻量级更小的「个人脚本管理」体系,不需要本地依赖,适合经常换系统、换设备执行一些轻量级任务的场景。

Todo

暂时没有 todo 了,不打算折腾了,感兴趣的朋友可以自己研究一下,不懂的话可以留言询问。搭建方法就是:

  1. fork lib 或者自己创建一个更好的公共库。
  2. 在网站某个路径下放一个 install 文件,根据传入参数把指令转发给目标脚本仓库。
  3. 在目标脚本仓库中创建一个命名固定的脚本用于接收传入的指令,然后可以根据需要执行操作或者调用公共库的下载、安装等通用流程。