script bash: uma maneira mais elegante de recuperar a versão mais atual do go?

script bash: uma maneira mais elegante de recuperar a versão mais atual do go?

Embargo: Tanto esta pequena linha do bash quanto a pergunta aqui são para fins de aprendizado, pois percebo que poderia "simplesmente abrir um navegador".

A menos que eu esteja enganado, o Google não oferece uma maneira amigável de fazer download da versão mais recente do golang. Scripts que eu vi (como esteessência) ainda exigem que você saiba e insira manualmente o número da versão go.

Meu golera ver se eu conseguia recuperar automaticamente a versão mais recente sem procurá-la.

Minha soluçãofunciona, mas eu adoraria aprender uma maneira mais enxuta e limpa:

GOURL=$(curl https://golang.org/dl/ 2>&1 | grep -o -E 'href="([^"#]+)"' | cut -d'"' -f2 | awk '/tar.gz/' | awk NR==1)

Resumindo, ele obtém todos os links da página de download do golang, limpa os URLs para manter apenas os tar.gz e, finalmente, retém a primeira linha da saída, que é o link exato que eu precisaria. Neste momento: seria paravá.1.8.3.

Mais uma vez, isso é para fins de aprendizagem. Obrigado pelo seu tempo.

EDITAR:Eu aceitei'Sugestão do GMastercomo resposta, pois melhorou minha solução sem ferramentas adicionais. No entanto, sou grato a outros comentaristas por me ajudarem a descobrir ferramentas extras. Embora eu esteja ansioso por quaisquer possíveis acréscimos no futuro, achei melhor encerrar isso, pois minha solicitação foi amplamente atendida.

Responder1

Se você olhar para ohttps://golang.org/dl/página, você verá que as versões mais recentes estão em Downloads em destaque. Agora, supondo que o Google não altere a estrutura html da página, esta é uma versão mais limpa

GOURL=$(curl -s https://golang.org/dl/ | grep 'download.*downloadBox' | grep -o 'https.*linux.*gz')

Responder2

A elegância é principalmente subjetiva. A maneira fácil de ficar de olho nos lançamentos Go é marcar um relógio nolançamentospágina no GitHub ou apenas adicione ofeed relevanteaos seus feeds de notícias (isto é, supondo que você esteja usando feeds RSS).

Mas se você precisa de um comando que pareça mais inteligente que curl+ grep, aqui está um usandoXidel:

{ echo -n url=; xidel https://golang.org/dl/ -s -e '//a[./div="Source"]/@href'; } | \
    curl -s -S -O -K -

Aqui xidelextrai o URL relevante da página de download usando XPath e, em seguida, curlfaz o download. Provavelmente um exagero aqui, mas xidelpode ser útil para outras tarefas.

Responder3

Não há necessidade de um script Bash. xidelé tudo que você precisa para analisar o site golang.
E não há necessidade de curlfazer isso se você quiser baixar o arquivo.

Para extrair o URL da fonte do golang mais recente:

$ xidel -s "https://golang.org/dl" -e '//a[div="Source"]/resolve-uri(@href)'
#or
$ xidel -s "https://golang.org/dl" -e 'resolve-uri(//tr[td="Source"]/td/a/@href[1])'
https://golang.org/dl/go1.16.5.src.tar.gz

É claro que você pode baixar este URL com curl...

$ curl -LO "$(xidel -s "https://golang.org/dl" -e '//a[div="Source"]/resolve-uri(@href)')"

... mas xideltambém pode fazer isso ...

$ xidel -s "https://golang.org/dl" -f '//a[div="Source"]/resolve-uri(@href)' --download '.'

...que baixa'go1.16.5.src.tar.gz'para o diretório atual.

informação relacionada