一个名为“vagrant packer”的应用程序每次运行时总是从远程位置下载 iso 和校验和文件,所以我正在创建一个脚本将 iso 下载到本地位置,但前提是 published_at 日期高于我的本地的。如果是,我下载 iso 和校验和,然后将发布日期存储在本地 .conf 文件中。
所以我尝试从项目的 github api url获取校验和的下载 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"))')
...
如您所见,我试图先获取正确的下载 url,然后再在下一行中执行 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
在这里,为了简单起见,我可能会做两个单独的测试,而不是试图正确地进行消极/积极的后视/前瞻。此外,如果您只对正则表达式是否匹配感兴趣,请使用
test()
rather than :match()
至于您的脚本,您使用
[ !prerelease ]
的是不使用prerelease
变量的脚本。你可能想说的是不过,这可以在没有额外变量的情况下完成:
使实用程序退出的
-e
选项jq
取决于最后一次评估的退出状态。为避免必须三次获取 JSON 文档,请将获取的 JSON 文档保存在临时文件中。为避免必须解析它三次,一次性获取所有数据: