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 xidel
wird die entsprechende URL mithilfe von XPath von der Download-Seite extrahiert und dann curl
heruntergeladen. Das ist hier wahrscheinlich viel zu viel des Guten, xidel
könnte aber für andere Aufgaben nützlich sein.
Antwort3
Sie brauchen kein Bash-Skript. xidel
Das ist alles, was Sie brauchen, um die Golang-Website zu analysieren.
Und Sie brauchen curl
beides 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 xidel
das 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.