每次运行一个名为“vagrant packer”的应用程序时,它总是从远程位置下载 iso 和校验和文件,因此我正在创建一个脚本,将 iso 下载到本地位置,但前提是published_at 日期高于我的日期本地的一个。如果是,我会下载 iso 和校验和,然后将发布日期存储在本地 .conf 文件中。
所以我尝试从以下位置获取校验和的下载网址项目的 github api url,但是 download_url 需要首先不匹配,然后匹配模式。
它不需要包含“unstable”并以“.iso.sha512”结尾。
运行sh
...
echo downloading checksum..
checksum_download_url=$(curl -s $github_latest_api_url | jq -r '.assets[].browser_download_url|select(match(".(?!unstable).iso.sha512"))')
...
正如您所看到的,我尝试首先获取正确的下载网址,然后再在下一行中执行curl 下载命令。
我已经尝试过,但我只是无法弄清楚匹配函数的正则表达式是什么。
我仍然没有得到任何结果、语法错误或包含不稳定的行。
#!/bin/bash
source ./uploads/mai-base.conf
prerelease=$(curl -s $github_latest_api_url | jq -r '.prerelease')
if [ !prerelease ]; then
r_publish_date=$(date -d $(curl -s $github_latest_api_url | jq -r '.published_at') +%s)
l_publish_date=$(date -d $publish_date +%s)
if [ $r_publish_date -gt $l_publish_date ]; then
echo downloading checksum..
checksum_download_url=$(curl -s $github_latest_api_url | jq -r '.assets[].browser_download_url|select(match(".(?!unstable).iso.sha512"))')
echo $checksum_download_url
#curl -L $download_url
echo downloading iso..
# downloading iso code goes here..
# date saving to mai-base.conf goes here..
fi
fi
# Start packer application..
# PACKER_LOG=1 packer build -var $ISO_VERSION manjaro-arm-installer.pkr.hcl
答案1
在这里,为了简单起见,我可能会做两个单独的测试,而不是试图获得正确的负/正向后/向前看。另外,如果您只是对正则表达式是否匹配感兴趣,请使用test()
而不是:match()
jq '.assets[].browser_download_url|select( (test("unstable")|not) and test("iso.sha512$"))'
至于您的脚本,您使用的[ !prerelease ]
是不使用prerelease
变量的脚本。你可能想说的是
if [ "$prerelease" != false ]; then
不过,这可以在没有额外变量的情况下完成:
if ! curl -s "$github_latest_api_url" | jq -e .prerelease >/dev/null
then
...
fi
该-e
选项jq
使实用程序退出,退出状态取决于上次评估。
为了避免必须获取 JSON 文档 3 次,请将获取的 JSON 文档保存在临时文件中。为了避免解析三次,请一次性取出所有数据:
curl -s ... |
jq -r '[.prerelease, .published_at, (.assets[].browser_download_url|select( (test("unstable")|not) and test("iso.sha512$"))) ] | @tsv' |
{
IFS=$'\t' read -r prerelease r_publish_date checksum_download_url
if [ "$prerelease" != false ]; then
# use "$r_publish_date" and "$checksum_download_url"
fi
}