「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
ここでは、簡素化のために正しい否定/肯定的な背面/前方ビューを取得するのではなく、2つの個別のテストを実行します。また、正規表現が一致するかどうかを知りたい場合は、代わりに次のものを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文書を一時ファイルに保存してください。 3 回の解析を防ぐには、すべてのデータを一度に取り出します。
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
}