script bash: ¿una forma más elegante de recuperar la versión más actual de go?

script bash: ¿una forma más elegante de recuperar la versión más actual de go?

Advertencia: Tanto esta pequeña línea bash como la pregunta aquí tienen fines de aprendizaje, ya que me doy cuenta de que podría "simplemente abrir un navegador".

A menos que me equivoque, Google no proporciona una forma compatible con scripts para descargar la última versión de golang. Scripts que he visto (como esteesencia) aún requieren que usted sepa e ingrese manualmente el número de versión go.

Mi metaEra para ver si podía recuperar automáticamente la última versión sin buscarla.

Mi soluciónFunciona, pero me encantaría aprender de una manera más sencilla y limpia:

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

En pocas palabras, obtiene todos los enlaces de la página de descarga de golang, limpia las URL para conservar solo las tar.gz y finalmente conserva la primera línea del resultado, que es el enlace exacto que necesitaría. Ahora mismo: sería parair.1.8.3.

Una vez más, esto es con fines de aprendizaje. Gracias por tu tiempo.

EDITAR:Yo acepté'Sugerencia de GMastercomo respuesta, ya que mejoró mi solución sin herramientas adicionales. Sin embargo, agradezco a otros comentaristas por ayudarme a descubrir herramientas adicionales. Aunque espero con ansias posibles adiciones en el futuro, pensé que sería mejor cerrar esto ya que mi solicitud fue ampliamente atendida.

Respuesta1

Si miras elhttps://golang.org/dl/página, verá que las últimas versiones están en Descargas destacadas. Ahora, suponiendo que Google no cambie la estructura html de la página, esta es una versión más limpia.

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

Respuesta2

La elegancia es mayoritariamente subjetiva. La manera fácil de estar atento a los lanzamientos de Go es configurar un reloj en ellanzamientospágina en GitHub, o simplemente agregue elalimentación relevantea sus fuentes de noticias (es decir, suponiendo que esté utilizando fuentes RSS).

Pero si necesita un comando que parezca más inteligente que curl+ grep, aquí tiene uno que usaXidel:

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

Aquí xidelextrae la URL relevante de la página de descarga usando XPath y luego curlla descarga. Probablemente sea demasiado excesivo aquí, pero xidelpodría resultar útil para otras tareas.

Respuesta3

No es necesario un script Bash. xideles todo lo que necesitas para analizar el sitio web de golang.
Y no es necesario curlninguno de los dos si desea descargar el archivo.

Para extraer la URL de la última fuente de golang:

$ 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

Por supuesto, puedes descargar esta URL con curl...

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

...pero xideltambién puedo hacer eso...

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

...que descarga'go1.16.5.src.tar.gz'al directorio actual.

información relacionada