我正在尝试构建一个脚本,该脚本将自动从https://curl.haxx.se/download/并将其安装在本地主机(Linux x86_64)上。如果我手动尝试,我可以在网站上查找最新版本,并使用适当的wget命令(版本名称在URL中)。例如,如果我想下载curl-8.0.1,wget命令将是
wget https://curl.haxx.se/download/curl-8.0.1.tar.gz
要在脚本中构建它,我必须首先提取下载网站上提供的最新版本。
有没有一种简单的方法可以自动检查最新版本并在脚本中构建wget命令?
如果我从网站下载index.html文件;下载/卷曲-";以及";tar.gz";用";头-1";,我得到一条线如下。有没有一种使用awk/sed/grep的简单方法可以让我从这行中提取版本号?
# grep -i "download/curl-" index.html | grep "tar.gz" | head -1
<tr class="even"><td>8.0.1</td> <td><a href="download/curl-8.0.1.tar.bz2">2.97MB</a></td><td><a href="download/curl-8.0.1.tar.gz">4.09MB</a></td><td> </td>
我试着用awk获得如下版本。这可能不是最好、最有效的方法。所以我想知道是否有更好的方法来获得最新的可下载卷曲版本
# grep -i "download/curl-" index.html | grep "tar.gz" | head -1 | awk -F".tar.gz" '{ print $1 }' | awk -F"download/" '{ print $NF }'
curl-8.0.1
如果解析网站的HTML感觉太脆弱,您也可以使用api从Github repo获得Curl:
curl -s https://api.github.com/repos/curl/curl/releases/latest | grep "browser_download_url.*gz" | cut -d : -f 2,3 | tr -d " | head -1 | wget -qi -
head
是因为其中一个输出将是密钥。你也可以使用其他一些工具从响应中获取信息,比如jq
,如果你已经安装了它-关键是,GH API的/releases/latest
会告诉你最新的标签是什么
URL="https://curl.se"
使用卷曲
$ curl -ks "$URL/download/" | tr ' ' 'n' | awk -F'"' -v url="$URL" '
/download/curl.*.tar.gz/{
n=split($2,a,"/");
print | "curl -ks " url"/"$2 " --output " a[n];
exit
}'
$ ls
curl-8.0.1.tar.gz
使用wget
$ wget --no-check-certificate -q --output-document - "$URL/download/" | tr ' ' 'n' |
awk -F'"' -v url="$URL" '
/download/curl.*.tar.gz/{
print | "wget --no-check-certificate -q " url"/"$2;
exit
}'
$ ls
curl-8.0.1.tar.gz