发布于 

为什么不搭建一个在线的脚本库,直接调用云端脚本呢?

细心的朋友可能会发现,我提供的一些脚本都可以通过一行命令安装,并且它们的安装命令极为相似,本文探讨是否可以把这套体系升级成为方便所有人发布脚本与下载脚本的开放性平台。

1
2
3
4
curl -s https://xaoxuu.com/install | sh -s vim-cn.sh
curl -s https://xaoxuu.com/install | sh -s tag.sh
curl -s https://xaoxuu.com/install | sh -s hexo.sh
curl -s https://xaoxuu.com/install | sh -s podspec.sh

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

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

对于相同的部分,以 vim-cn.sh 为例,它的 install 实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash
# 这个脚本负责下载和安装的逻辑

# function lib
lib=https://cdn.jsdelivr.net/gh/xaoxuu/[email protected]
# repository name
REPO='vim-cn.sh'
# clint file name
TARGET='cli.sh'
# clint file name
RENAME='upload'
# download version
VERSION=$1
if [ "$VERSION" == "" ];then
VERSION='master'
fi

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

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

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

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

易于扩展

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

易于使用

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

1
curl -s https://xaoxuu.com/install | sh -s 我的脚本

这套体系类似于「应用商店、Cocoapods、npm」一样,但目前只对创建在 https://github.com/xaoxuu/ 中的仓库有效。

Todo

  1. 把「扩展性」范围放大至所有GitHub用户的仓库,而不是只有我自己账号下的仓库。
  2. 为 lib 库增加更多基础组件。
  3. 需要懂脚本的大佬完成跨平台兼容性(Win/Mac/Linux)
  4. 修复现存问题,例如 volantis/start 首次安装后无限循环的BUG
  5. 如果可能,建一个前端页面可供搜索、查阅文档。
  6. 社区、推广,让更多人加入。

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站由 @xaoxuu 创建,使用 Stellar 作为主题,您可以在 GitHub 找到本站源码。