一行命令执行系列任务

日常开发过程中,安装命令行工具过程有时候比较繁琐,使用脚本时需要将脚本仓库克隆下来,我们怎么能够简化这些过程呢,homebrew的安装过程提供了一种解决方案,就是直接通过bash执行一个远端的sh文件

1
2
# homebrew安装命令
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

实现方式

/bin/bash -c表示命令会从后面紧跟的字符串读取,如果字符串后面还有内容,则作为参数。(-c: cmd)

curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh表示请求install.sh的源内容

这样就可以读取远端的一个脚本,执行脚本了,在脚本中我们可以做很多自动化的工作,使用者可以在不用下载或者安装的情况执行这些动作

GitLab实现

企业内部一般都使用的是GitLab托管代码,并且有权限控制

GitLab官方推荐使用如下方式访问,文档地址

1
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/13083/repository/files/app%2Fmodels%2Fkey%2Erb?ref=master"

your_access_token在GitLab仓库的setting选项当中可以生成,而且仅展示一次,请注意保存,这个用来做身份校验。

13083是你仓库的Project ID,这个一般在Project overview就可以看到。

app%2Fmodels%2Fkey%2Erb是app/models/key.rb的urlencode,是文件路径的urlencode。在命令中files后面的部分要使用文件在仓库的路径的urlencode形式,这样才能保证这部分是一个整体,不会在url解析时被误解

所以一个完整的执行远程GitLab文件脚本的命令如下:

1
/bin/bash -c "$(curl --header "PRIVATE-TOKEN: <your_access_token>" "https://<your_gitlab_domain>/api/v4/projects/<your_project_id>/repository/files/<your_file_path_urlencode>?ref=master)"