Run Script via URL

 20th August 2020 at 2:19pm

很多软件会提供一些快速安装的方法,只敲一行命令就可以将软件安装进系统中。比如 sphf13-vim

sh <(curl https://j.mp/spf13-vim3 -L)

这篇文章探讨这些方法。

假如你写了个软件,想用户有方便的办法安装它到系统中,你可以先写一个安装脚本(如 install.sh)。你可以通过这个脚本,让用户去下载你的二进制可执行文件,也可以拉代码到本地再编译等等。

然后你将这个文件放到你的 CDN 上,如 https://example.com/install.sh 上。你想让用户下载它并运行。

下面有些操作是不够安全的。一般来说,你应该对下载的文件进行 hash 效验,防止被篡改。

常规方式

下载下来的脚本先写到本地文件中,再运行:

curl https://example.com/install.sh -L > install.sh && sh install.sh

你也可以用 wget 来下载脚本,但是有些发行版并不会预装 wget

wget -O install.sh https://example.com/install.sh && sh install.sh

如果 install.sh 本身带有参数,就在最后面带就可以:

sh install.sh <params>

进阶方式 1

下载下来的脚本直接作为标准输入给 bash 执行:

curl -L https://example.com/install.sh | sh
wget -O - https://example.com/install.sh | sh

如果脚本想带参数:

... | sh -s -- <params>

如果你用 root 执行,那么管道后的 sh 需要用完整路径 /bin/sh。这应该是出于安全的考量。

进阶方式 2

sh <(curl -L https://example.com/install.sh) <params>

使用这两种进阶方式时,bash 不会等到 curl 把整个文件下完就会开始执行,有多少行脚本就执行多少。这使得用 Makeself 制作的脚本可能不能使用这种方式运行。

参考