"vagrant packer"라는 응용 프로그램을 실행할 때마다 항상 원격 위치에서 iso 및 체크섬 파일을 다운로드하므로 iso를 로컬 위치로 다운로드하는 스크립트를 만들고 있지만 게시된 날짜가 내 날짜보다 높은 경우에만 가능합니다. 지역적인 것. 그렇다면 iso와 체크섬을 다운로드한 다음 출시 날짜를 로컬 .conf 파일에 저장합니다.
그래서 체크섬의 다운로드 URL을 얻으려고했습니다.프로젝트 github API URL, 하지만 download_url이 먼저 일치하지 않아야 하고 그 다음 패턴이 일치해야 합니다.
"불안정"을 포함하고 ".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을 얻은 다음 다음 줄에서 컬 다운로드 명령을 실행하려고 합니다.
나는 이것을 시도했지만 함수와 일치하는 정규식이 무엇인지 알 수 없습니다.
여전히 결과가 나오지 않거나, 구문 오류가 있거나, 불안정한 행이 포함되어 있습니다.
#!/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
}