Bash-Skript: Gibt es eine elegantere Möglichkeit, die aktuellste Version von Go abzurufen?

Bash-Skript: Gibt es eine elegantere Möglichkeit, die aktuellste Version von Go abzurufen?

Vorbehalt: Sowohl diese kleine Bash-Zeile als auch die Frage hier dienen Lernzwecken, da mir klar ist, dass ich „einfach einen Browser öffnen“ könnte.

Wenn ich mich nicht irre, bietet Google keine skriptfreundliche Möglichkeit, die neueste Version von Golang herunterzuladen. Skripte, die ich gesehen habe (wie diesesKern) erfordern weiterhin, dass Sie die Go-Versionsnummer kennen und manuell eingeben.

Mein Zielwollte ich sehen, ob ich die neueste Version automatisch abrufen kann, ohne danach suchen zu müssen.

Meine Lösungfunktioniert, aber ich würde gerne eine schlankere und sauberere Methode lernen:

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

Kurz gesagt, es holt alle Links von der Download-Seite von Golang, bereinigt die URLs, sodass nur die tar.gz-URLs erhalten bleiben, und behält schließlich die erste Zeile der Ausgabe bei, die genau der Link ist, den ich benötigen würde. Im Moment: Es wäre fürgehe.1.8.3.

Auch dies dient Lernzwecken. Vielen Dank für Ihre Zeit.

BEARBEITEN:Ich akzeptiere'GMasters Vorschlagals Antwort, da es meine Lösung ohne zusätzliche Tools verbesserte. Ich bin jedoch anderen Kommentatoren dankbar, die mir geholfen haben, zusätzliche Tools zu entdecken. Obwohl ich mich auf mögliche zukünftige Ergänzungen freue, dachte ich, es wäre am besten, dies zu schließen, da meine Anfrage ausreichend beantwortet wurde.

Antwort1

Wenn Sie sich diehttps://golang.org/dl/Seite sehen Sie, dass die neuesten Versionen in den empfohlenen Downloads zu finden sind. Vorausgesetzt, Google ändert die HTML-Struktur der Seite nicht, ist dies eine sauberere Version

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

Antwort2

Eleganz ist größtenteils subjektiv. Der einfache Weg, Go-Releases im Auge zu behalten, besteht darin, eine Uhr auf denMitteilungenSeite bei GitHub, oder fügen Sie einfach dierelevanter Feedzu Ihren Newsfeeds (vorausgesetzt, Sie verwenden RSS-Feeds).

Wenn Sie jedoch einen Befehl benötigen, der cleverer aussieht als curl+ grep, hier ist einer mitXidel:

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

Hier xidelwird die entsprechende URL mithilfe von XPath von der Download-Seite extrahiert und dann curlheruntergeladen. Das ist hier wahrscheinlich viel zu viel des Guten, xidelkönnte aber für andere Aufgaben nützlich sein.

Antwort3

Sie brauchen kein Bash-Skript. xidelDas ist alles, was Sie brauchen, um die Golang-Website zu analysieren.
Und Sie brauchen curlbeides nicht, wenn Sie die Datei herunterladen möchten.

So extrahieren Sie die URL der neuesten Golang-Quelle:

$ 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

Sie können diese URL natürlich mit curl... herunterladen.

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

...aber xideldas kann man auch...

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

...die heruntergeladen werden„go1.16.5.src.tar.gz“zum aktuellen Verzeichnis.

verwandte Informationen