Um aplicativo chamado "vagrant packer" sempre baixa o arquivo iso e checksum do local remoto toda vez que eu o executo, então estou criando um script que baixa o iso para um local local, mas apenas se a data publish_at for maior que a minha local. Se for, eu baixo o iso e a soma de verificação e, em seguida, armazeno a data de publicação em um arquivo .conf local.
Então, tento obter o URL de download da soma de verificação do url da API do github do projeto , no entanto, o download_url precisa primeiro não corresponder e, em seguida, corresponder a um padrão.
Ele precisa não conter "unstable" e terminar com ".iso.sha512".
correr.sh
...
echo downloading checksum..
checksum_download_url=$(curl -s $github_latest_api_url | jq -r '.assets[].browser_download_url|select(match(".(?!unstable).iso.sha512"))')
...
Como você pode ver, estou tentando primeiro obter o URL de download correto, antes de executar um comando curl download na próxima linha.
Eu fiz uma tentativa, mas simplesmente não consigo descobrir qual é o regex da função match.
Ainda estou obtendo nenhum resultado, um erro de sintaxe ou a linha instável incluída.
#!/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
Aqui, eu provavelmente faria dois testes separados para simplificar, em vez de tentar olhar para trás/à frente negativo/positivo. Além disso, use
test()
em vezmatch()
de se estiver apenas interessado em saber se uma expressão regular corresponde ou não:Quanto ao seu script, você usa
[ !prerelease ]
o que não está usando aprerelease
variável. O que você provavelmente queria dizer eraIsso poderia ser feito sem uma variável extra, no entanto:
A
-e
opção dejq
faz com que o utilitário saia com um status de saída que depende da última avaliação.Para evitar ter que buscar seu documento JSON três vezes, salve o documento JSON buscado em um arquivo temporário. Para evitar ter que analisá-lo três vezes, obtenha todos os dados de uma só vez: